无名阁,只为技术而生。流水不争先,争的是滔滔不绝。

(getattribute) python中的getattribute 、getattr、setattr方法详解 在Python中__getattribute__getattr和setattr是用于访问和操作对象属性的内置方法 全网首发(图文详解1)

前沿技术 Micheal 6个月前 (06-07) 58次浏览 已收录 扫描二维码

(getattribute) python中的getattribute 、getattr、setattr方法详解

在Python中,__getattribute__getattrsetattr 是用于访问和操作对象属性的内置方法。

  • __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)

喜欢 (0)
[]
分享 (0)
关于作者:
流水不争先,争的是滔滔不绝