__getattribute__如何触发
时间: 2023-08-01 10:06:42 浏览: 172
__getattribute__是Python中一个特殊方法,用于获取对象的属性。它在每次访问对象的属性时都会被触发。
当我们使用点操作符访问对象的属性时,例如 obj.attr,Python会在obj上调用__getattribute__方法。这个方法接受两个参数:self和name,其中self是对象本身,name是要获取的属性名。
如果对象定义了__getattribute__方法,那么它将被调用并返回相应的属性值。如果对象没有定义__getattribute__方法,则会使用默认的__getattribute__实现来查找属性。
需要注意的是,为了避免无限递归调用,__getattribute__方法内部在访问其他属性时应该使用super().__getattribute__(name)而不是self.name。否则,每次访问属性都会再次触发__getattribute__方法,导致无限循环。
以下是一个示例代码,演示了如何定义和使用__getattribute__方法:
```python
class MyClass:
def __init__(self):
self.attr = "Hello"
def __getattribute__(self, name):
if name == "attr":
return "World"
else:
return super().__getattribute__(name)
obj = MyClass()
print(obj.attr) # 输出 "World"
print(obj.other_attr) # 抛出 AttributeError
```
在这个例子中,当我们访问obj.attr时,__getattribute__方法被调用并返回了"World"。而当我们访问obj.other_attr时,由于对象没有定义该属性,会抛出AttributeError异常。
阅读全文