getattribute和getattr用法
时间: 2024-06-06 11:08:59 浏览: 12
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` 方法只有在指定的属性不存在时才会被调用。
getattribute和setattribute
getattribute和setattribute是Python中的两个内置函数,用于获取和设置对象的属性。
getattribute函数用于获取对象的属性值,它会在对象的__dict__中查找属性,如果找不到则会调用对象的__getattr__方法。如果对象没有定义__getattr__方法,则会抛出AttributeError异常。
setattribute函数用于设置对象的属性值,它会在对象的__dict__中查找属性,如果找不到则会调用对象的__setattr__方法。如果对象没有定义__setattr__方法,则会直接在对象的__dict__中添加属性。
需要注意的是,getattribute和setattribute函数都是非常底层的函数,一般情况下我们不需要直接使用它们,而是通过点号或者getattr、setattr函数来访问和设置对象的属性。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)