目錄python
class Foo: x = 1 def __init__(self, y): self.y = y def __getattr__(self, item): print('----> from getattr:你找的屬性不存在') def __setattr__(self, key, value): print('----> from setattr') # self.key = value # 這就無限遞歸了,你好好想一想 # self.__dict__[key] = value # 應該使用它 def __delattr__(self, item): print('----> from delattr') # del self.item # 無限遞歸了 self.__dict__.pop(item) f1 = Foo(10)
print(f1.__dict__ ) # 由於你重寫了__setattr__,凡是賦值操做都會觸發它的運行,你啥都沒寫,就是根本沒賦值,除非你直接操做屬性字典,不然永遠沒法賦值 f1.z = 3 print(f1.__dict__)
f1.__dict__['a'] = 3 # 咱們能夠直接修改屬性字典,來完成添加/修改屬性的操做 del f1.a print(f1.__dict__)
----> from delattr {}
f1.xxxxxx
----> from getattr:你找的屬性不存在