__getitem__, __setitem__
__getattr__内置使用点号获取实例属性属性如 s.name,自调用__getattr____setattr__设置类实例属性 如s.name='tom',自调用__setattr____getitem__ 使用[]获取实例属性 如s['name'],自调用__getitem____setitem__ 使用[]设置实例属性如 s['name'] = 'tom' ,自调用__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) )。
更多推荐
已为社区贡献1条内容
所有评论(0)