類的內置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'}