類的內置item相關方法只有在通過字典key操作才會觸發
而通過點的方式來操作,則觸發attr相關方法
class Foo: def __init__(self,name,age): self.name = name self.age = age 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) f = Foo('Jerry',18) #獲取屬性,通過字典key的形式,其實是操作底層__dict__[key]來獲取相應的值 print(f['name']) #執行getitem Jerry #設置(修改)屬性,也是通過字典key的形式,其實是操作底層__dict__[key] = value 來設置(修改)相應的值 f['name'] = 'Meanwey' #執行setitem print(f.__dict__) #{'name': 'Meanwey', 'age': 18} #刪除屬性,通過字典key的形式,其實是操作底層__dict__.pop(key)來刪除相應的屬性和值 del f['age'] #執行delitem print(f.__dict__) #{'name': 'Meanwey'}