如何在 __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原始值。
我需要重写 __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原始值。