(getattribute) python中的getattribute 、getattr、setattr方法详解
在Python中,__getattribute__
、getattr
和 setattr
是用于访问和操作对象属性的内置方法。
__getattribute__
方法:
这是一个特殊方法,当你尝试访问一个属性时会自动被调用,即使该属性不存在也不例外。每次通过点号(.
)访问属性时,都会先调用__getattribute__
。如果属性不存在,则会触发AttributeError
,此时可以通过定义__getattr__
方法来处理这个错误。
class MyClass:
def __init__(self):
self.a = 'A'
def __getattribute__(self, name):
print(f"Accessing: {name}")
try:
return super().__getattribute__(name)
except AttributeError:
return '未找到属性'
obj = MyClass()
print(obj.a) # 正常访问存在的属性,输出 'A'
print(obj.non_existing) # 访问不存在的属性,输出 '未找到属性'
getattr
函数:
getattr
函数用于动态地获取对象的属性。如果属性存在,返回它的值。如果不存在,而提供了默认值,则返回默认值;如果没有提供默认值,将抛出AttributeError
。
class MyClass:
def __init__(self):
self.a = 'A'
obj = MyClass()
print(getattr(obj, 'a', '默认值')) # 输出 'A'
print(getattr(obj, 'b', '默认值')) # 属性 'b' 不存在,输出 '默认值'
# print(getattr(obj, 'b')) # 如果这行取消注释,则会抛出 AttributeError
setattr
函数:
setattr
函数负责设置对象的属性。如果属性存在,会更新它的值;如果不存在,会创建一个新的属性。
class MyClass:
pass
obj = MyClass()
setattr(obj, 'a', '值A')
print(obj.a) # 输出 '值A'
# 也可以直接使用 obj.a = '值A' 来设置属性
当你需要访问或设置对象的属性时,可以通过上述方法操作。它们都是每个类内置的功能,可以在你创建的类中重写这些方法,以更好地控制属性访问和修改行为,例如实现属性值的验证或只读属性等。但需注意,如果你不小心重写了这些方法,可能会导致无法预料的错误,因为调用 __getattribute__
或 setattr
时就会触发你自定义的逻辑,从而可能导致递归调用或其他问题。在重写这些方法时,通常使用 super()
来避免直接引用自身,从而避免无限递归。
(国内狗狗币交易平台) 狗狗币在哪个交易所买?国内狗狗币购买平台十大交易所盘点 狗狗币交易所概述 全网首发(图文详解1)
(ps破解版安装包) Adobe Photoshop 2023(ps2023) v24.7.0.643 中文直装版(附安装教程) 64位 Adobe Photoshop 2023 安装基本流程 全网首发(图文详解1)