python類的內建attr屬性
阿新 • • 發佈:2018-12-09
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) #__setattr__新增/修改屬性會觸發它的執行 f1=Foo(10) print(f1.__dict__) # 因為你重寫了__setattr__,凡是賦值操作都會觸發它的執行,你啥都沒寫,就是根本沒賦值,除非你直接操作屬性字典,否則永遠無法賦值 f1.z=3 print(f1.__dict__)#__delattr__刪除屬性的時候會觸發 f1.__dict__['a']=3#我們可以直接修改屬性字典,來完成新增/修改屬性的操作 del f1.a print(f1.__dict__) #__getattr__只有在使用點呼叫屬性且屬性不存在的時候才會觸發 f1.xxxxxx