py 5.31

#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)
类的内置方法

猜你喜欢

转载自www.cnblogs.com/liujjpeipei/p/9118472.html
py