getattr和getattribute
时间: 2024-06-07 14:11:13 浏览: 69
getattr和getattribute都是Python中的内置函数,用于获取对象的属性值。但它们的实现方式不同,具体如下:
- getattr(obj, name[, default]):获取对象obj中名为name的属性值。如果该属性不存在,则返回default(如果提供了default参数),否则会抛出AttributeError异常。
- getattribute(obj, name):获取对象obj中名为name的属性值。如果该属性不存在,则会抛出AttributeError异常。与getattr不同的是,getattribute是在获取属性时就会被调用,而不是在属性不存在时被调用。
由于getattribute是在属性获取时被调用,因此在实现getattribute时需要注意避免出现无限递归的情况,因为在获取属性值时可能会再次调用getattribute方法。
相关问题
getattribute和getattr用法
getattribute和getattr都是Python面向对象编程中的方法,用于获取对象的属性。
getattribute是一个内置方法,当你试图访问一个对象的属性时,它会被自动调用。它工作原理是,它首先检查该对象是否有要访问的属性,如果有,则返回该属性的值,如果没有,则尝试调用类的getattr方法。
getattr是Python的一个内置函数,用于获取对象的指定属性。它有两个参数,第一个参数是要获取属性的对象,第二个参数是属性的名称。如果该属性存在,则返回它的值,如果属性不存在,则可以返回一个默认值。
python getattribute 和 getattr
`__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` 方法只有在指定的属性不存在时才会被调用。
阅读全文