#1.try except /2.try except else /3.try except else finally /4.try finally# try:# lis = [1,2,3]# content = int(input('请输入数字'))# print(lis[content])# # name# except IndexError:# print('超出范围')# except ValueError:# print('您输入的不是数字哦')# except Exception as e: #万能异常(可省略),但是省略以后无法看见具体报错原因。# print(e)# else:# print('成功执行') #没有错误的时候执行else后面的代码# finally: #无论任何时候,正确还是错误还是其它 ,都执行finally.# print('我是finally后面的代码')#else(没有错误的时候执行,可用于显示成功或结果)#finally(无论如何都执行,可用于操作文件的最后关闭文件)# def func():# try:# print('777')# return 888# finally: #就算前面有return也要继续执行,挡不住。# print('还执行我')# func()
# 7.创建一个对象:触发两个方法:# 1.构造方法:__new__(cls,*args,**kwargs)# 2.初始化方法:__init__(self)#__new__方法是由object调用的类,生成的对象。object.__new__(cls)# class A:# def __init__(self,name):#再触发init方法# self.name = name #进而进行属性赋值等操作# def __new__(cls, *args, **kwargs):#触发new方法# return object.__new__(cls) #得到对象的返回值# b = A('alex')#创建一个对象#与此方法相关的一个模式:单例模式(只存在一个对象)# class A:# _instance = None# def __init__(self,name):# self.name = name# def __new__(cls, *args, **kwargs):# if not cls._instance:# cls._instance = object.__new__(cls)# return cls._instance# else:return cls._instance# a = A('alex')#首先创建一个对象,_instance值为None# b = A('alex')#再创建一个对象,_instance值为第一个对象,直接返回,得到的还是第一个对象的值。#8.删:1.@property的deleter:删除伪装成属性的方法。# 2.delattr:删除属性。# 3.__del__:del 对象名,主动触发__del__方法。主动触发一般用来做关闭文件的动作,在__del__方法下面做关闭文件的操作,# 防止用户忘记关闭文件资源。# 如果不主动触发,程序结束后,也会自动触发__del__方法,清除数据。缺点是无法在删除前进行作为。#9.item系列:#*对象[参数]:触发__getitem__方法。# class A:# def __getitem__(self, item):#对象[item] 得到一个getitem代码中返回值# return 'b'# obj = A()# print(obj['a'])#*对象[参数] = 值:触发__setitem__方法。# class A:# def __setitem__(self, key, value):# self.__dict__[key]= value# def __getitem__(self, item):# return self.__dict__[item]# b = A()# print(b['a']) #没有值# b['a'] = 'liujunjie' #赋值# print(b['a'])#*del 对象名:触发 __delitem__:# class A:# def __setitem__(self, key, value):# self.__dict__[key]= value## def __getitem__(self, item):# return self.__dict__[item]# def __delitem__(self, key):# return self.__dict__.pop(key)# b = A()# b['a'] = 'liujunjie'# print(b['a'])# del b['a'] #触发 __delitem__方法,执行其中的代码,删除key# print(item.__dict__)#类的内置方法一般也用于模块的一些内置方法,如:#random模块的choice/shuffle#choice(对象):触发__len__和__getitem__方法。# 1.触发__len__:计算对象的长度,以此来根据概率随机抽取。# 2.触发__getitem__:使对象变成一个可迭代对象(可以用[]取值的对象)#shuffle(对象):打乱顺序。触发__len__和__getitem__方法、以及__setitem__方法。#纸牌# class Paper:# ranks = [str(i) for i in range(2,11)] + list('JQKA')# suits = ['红心','方片','黑桃','草花']# def __init__(self):# self._cards = [(rank,suit) for rank in Paper.ranks for suit in Paper.suits]# def __len__(self):# return len(self._cards)# def __setitem__(self, key, value):# self._cards[key] = value #shuffle触发此方法。# def __getitem__(self, item):# return self._cards[item]# a = Paper()# print(a[5]) #返回纸牌列表的第五个索引的元素('3', '方片')# import random# print(random.choice(a)) #getitem将a变成了可迭代对象,可以用choice随机抽取其中的元素# random.shuffle(a) #打乱顺序# print(a._cards)