Python-魔法函数__getattr__()与__getattribute__()的区别

Posted 网络迷途者

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python-魔法函数__getattr__()与__getattribute__()的区别相关的知识,希望对你有一定的参考价值。

  1. 如果某个类定义了 __getattribute__() 方法,在 每次引用属性或方法名称时 Python 都调用它(特殊方法名称除外,因为那样将会导致讨厌的无限循环)。
  2. 如果某个类定义了 __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) 方法

Python魔法方法(12):__getattr __(self, item) 方法

Python045-魔法方法:属性访问

Python3 魔法方法:属性访问