Python-魔法函数__getattr__()与__getattribute__()的区别
Posted 网络迷途者
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python-魔法函数__getattr__()与__getattribute__()的区别相关的知识,希望对你有一定的参考价值。
- 如果某个类定义了
__getattribute__()
方法,在 每次引用属性或方法名称时 Python 都调用它(特殊方法名称除外,因为那样将会导致讨厌的无限循环)。 - 如果某个类定义了
__getattr__()
方法,Python 将只有在查找不到属性时才会调用它。如果实例 x 定义了属性 color,x.color
将 不会 调用x.__getattr__(‘color‘)
;而只会返回 x.color 已定义好的值
1 class User: 2 def __init__(self, name, info={}): 3 self.name = name 4 self.info = info 5 6 def __getattr__(self, item): 7 return self.info[item] 8 9 #def __getattribute__(self, item): 10 # return "getattribute item" 11 12 if __name__ == "__main__": 13 user = User("tom", info={"phone":"12345678901", "age":20}) 14 print(user.name) 15 print(user.age)
以上是关于Python-魔法函数__getattr__()与__getattribute__()的区别的主要内容,如果未能解决你的问题,请参考以下文章
7.2__getattr____getattribute__魔法函数
Python魔法方法之属性访问 ( __getattr__, __getattribute__, __setattr__, __delattr__ )
Python魔法方法(12):__getattr __(self, item) 方法