python getattribute 和 getattr
时间: 2024-06-08 10:08:02 浏览: 101
`__getattribute__` 和 `getattr` 都是 Python 中用于获取对象属性的方法。它们之间有一些区别:
- `__getattribute__` 是一个特殊的魔术方法,用于在访问对象的属性之前被调用。它允许你自定义属性的访问行为。当你使用点号或 getattr 函数来访问对象的属性时,`__getattribute__` 会被调用,并尝试获取相应的属性。如果找不到属性,会引发 AttributeError 异常。
- `getattr` 是一个内置函数,用于在运行时获取对象的属性。它接受两个参数:对象和要获取的属性的名称。如果指定的属性存在,则返回该属性的值;如果不存在,则返回一个默认值(可选参数)或引发 AttributeError 异常。
这里有一个例子来展示它们的用法:
```python
class MyClass:
def __init__(self):
self.foo = 'Hello'
def __getattribute__(self, name):
print('__getattribute__ called')
return object.__getattribute__(self, name)
my_obj = MyClass()
print(my_obj.foo) # 调用 __getattribute__
print(getattr(my_obj, 'foo')) # 使用 getattr
```
输出:
```
__getattribute__ called
Hello
Hello
```
请注意,`__getattribute__` 方法在每次访问属性时都会被调用,而 `getattr` 方法只有在指定的属性不存在时才会被调用。
阅读全文