1. 程式人生 > >python類的內建attr屬性

python類的內建attr屬性

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