python之 __getattr____getattr____getitem____setitem__ 使用
Posted jvincent
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python之 __getattr____getattr____getitem____setitem__ 使用相关的知识,希望对你有一定的参考价值。
__getattr__内置使用点号获取实例属性属性如 s.name,自调用__getattr__ __setattr__设置类实例属性 如s.name=‘tom‘,自调用__setattr__ __getitem__ 使用[]获取实例属性 如s[‘name‘],自调用__getitem__ __setitem__ 使用[]设置实例属性如 s[‘name‘] = ‘tom‘ ,自调用__setitem__ __dict__ 为参数字典
对象[‘X‘] #执行__getitem__
对象[‘X‘] = 123 #执行__setitem__
对象.X #执行__getattr__
对象.X =123 #执行__setattr__
上代码:
class Student: def __getattr__(self, item): return item + ‘ is not exits‘ def __setattr__(self, key, value): self.__dict__[key] = value def __getitem__(self, item): return self.__dict__[item] def __setitem__(self, key, value): self.__dict__[key] = value s = Student() print(s.name) # 调用__getattr__方法 输出‘name is not exits‘ s.age = 1 # 调用__setattr__ 方法 print(s.age) # 输出 1 print(s[‘age‘]) # 调用 __getitem__方法 输出1 s[‘name‘] = ‘tom‘ # 调用 __setitem__ 方法 print(s[‘name‘]) # 调用 __getitem__ 方法 输出 ‘tom‘
以上是关于python之 __getattr____getattr____getitem____setitem__ 使用的主要内容,如果未能解决你的问题,请参考以下文章
__get__,__getattr__,__getattribute__的区别
8.python之面相对象part.6(反射&__call__,__setattr__,__delattr__,__getattr__)
Python魔法方法之属性访问 ( __getattr__, __getattribute__, __setattr__, __delattr__ )