__getattr__內置使用點號獲取實例屬性屬性如 s.name,自調用__getattr__
__setattr__設置類實例屬性 如s.name='tom',自調用__setattr__
__getitem__ 使用[]獲取實例屬性 如s['name'],自調用__getitem__
__setitem__ 使用[]設置實例屬性如 s['name'] = 'tom' ,自調用__setitem__
給對象進行容器化可以對類實現這個函數
class Student:
def __getitem__(self, item):
print("__getitem__", item)
return self.__dict__[item]
def __setitem__(self, key, value):
print("__setitem__", key, value)
self.__dict__[key] = value
s = Student()
s.x = 5
print(s.x) # 5
print(s["x"]) # 調用 __getitem__ x 5
s['name'] = 'tom' # 調用 __setitem__ 方法
print(s.__dict__) # {'x': 5, 'name': 'tom'}
print(s.name) # tom
print(s["name"]) # 調用 __getitem__方法 輸出 tom
通過容器化,使得獲取對象的屬性有點像訪問dict或是list這樣的容器
Python 類特殊方法__getitem__
凡是在類中定義了這個__getitem__ 方法,那麼它的實例對象(假定爲p),可以像這樣
p[key] 取值,當實例對象做p[key] 運算時,會調用類中的方法__getitem__。
一般如果想使用索引訪問元素時,就可以在類中定義這個方法(__getitem__(self, key) )。