__getitem__, __setitem__

 

__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) )。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章