class Foo: def __getitem__(self, item): print("getitem") return self.__dict__[item] def __setitem__(self, key, value): print("setitem") self.__dict__[key]=value def __delitem__(self, key): print("delitem") self.__dict__.pop(key) f1=Foo() print(f1.__dict__) # f1.name="egon" f1['name']="egon" f1["age"]="20" print(f1.__dict__) del f1["name"] print(f1.__dict__) f1['age'] print(f1['age']) #點的方式操作的屬性與getattr相關,中括號操作的屬性與item相關
#item方法注意是通過下標來訪問字典,getattr通過.號訪問實例屬性,__getitem__方法只有當self的屬性存在時通過下標訪問時才會觸發,__getattr__當訪問self的屬性不存在時候觸發