__getatter__

103 阅读1分钟

__getattr__ 是一个特殊方法(也称为魔术方法),用于在访问一个对象的不存在的属性时被调用。它允许你自定义对象的属性查找行为。

当你使用点号 . 访问对象的属性时,解释器会首先查找对象自身是否有该属性。如果对象自身没有这个属性,那么解释器会调用对象的 __getattr__ 方法来处理。

class MyClass:
    def __getattr__(self, attr):
        # 处理不存在的属性 attr
        print(f"属性 {attr} 不存在")

obj = MyClass()
obj.foo  # 运行时调用 obj.__getattr__('foo')

在上面的示例中,当我们使用 obj.foo 访问对象属性时,如果属性 foo 不存在,解释器将调用 __getattr__('foo') 方法。你可以在 __getattr__ 方法中自定义处理操作,例如输出提示信息或返回默认值。

需要注意的是,只有在对象自身找不到属性时,才会触发 __getattr__ 方法。如果属性在对象的 __dict__ 字典中或通过其他方式可访问到,__getattr__ 方法将不会被调用。此外,如果你想要截获对某些已知属性的访问,你可以考虑使用 __getattribute__ 方法。