# 类的内置attr属性 class Foo: x = 1 def __init__(self, y): self.y = y def __getattr__(self, item): # 当实例调一个不存在的属性时才触发此方法 print('执行__getattr__,你查找的属性【%s】不在在' % item) def __setattr__(self, key, value): # 当添加或修改实例的属性时,会触发此方法 self.__dict__[key] = value # self.key = value # 不能使用这样的写法,因为此处设置了值,所以又会调用__setattr__这个方法,最后就无限递归 print('执行__setattr__') def __delattr__(self, item): # 当删除实例的属性时,会触发此方法 self.__dict__.pop(item) # del self.item # 不能使用这样的写法,因为此处删除了属性,所以又会调用__delattr__这个方法,最后就无限递归 print('执行__delattr__') f1 = Foo(10) # 对实例添加了属性,所以会执行__setattr__ print(f1.y) # 10 print(getattr(f1, 'y')) # 10 f1.ssssssss # 实例没有ssssssss这个属性,所以会执行 __getattr__ f1.a = 100 # 对实例添加了属性,所以会执行__setattr__ f1.y = 100 # 对实例修改了属性,所以会执行__setattr__ del f1.y # 删除了实例的y属性,所以会执行__delattr__ # 对于上述三个attr的属性,系统本身已经定义好了,如果我们自己编写,表示重写了系统原有的 # 一般只是__getattr__用的较多,其它两个属性用的比较少 print(dir(f1)) # 通过dir查看对象的内置属性
类的内置attr属性(__getattr__、__setattr__、__delattr__)
猜你喜欢
转载自www.cnblogs.com/dangrui0725/p/9465459.html
今日推荐
周排行