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

 

 

 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐