如何在 __getattr__ 方法中获取 属性?

How to get property in __getattr__ method?

我需要重写 __getattr__ 方法,但我该如何获取那里的属性?

我可以像这样从 __getattr__ 方法访问属性:

class Someclass:
    @property
    def some_prop(self):
        return something

    def __getattr__(self, attr_name):
        return self.__dict__[attr_name]

但是如果attr_name == 'some_prop'就不行了,如何访问some_prop?

编辑: 这不是关于如何解决 '2+2 = x' 的问题,这是关于 python 中元编程的问题,提供的示例只是为了说明问题

你试过self.some_prop()了吗? 因为它有效。

但也 self.__class__.some_prop.__get__(self, self.__class__) 如果你只是想做不同的事情。

除此之外,您知道 __getattr__ 不会被称为 instance.some_prop 的参考,对吧?由于描述符存在,因此不会调用 __getattr__。 (另外,这就是它起作用的原因)。

如果您需要拦截 instance.some_prop 本身的引用,您将需要实现 __getattribute__ 而不是 - 这是无条件调用 all 您的属性参考资料。

在那种情况下,我建议直接无条件地调用 super().__getattribute__,然后检查属性是否为 some_prop。如果不是,就return原始值。