我需要覆盖__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中元编程的问题,提供的示例仅用于说明问题
答案 0 :(得分:2)
你试过self.some_prop()
吗?
因为它有效。
但是self.__class__.some_prop.__get__(self, self.__class__)
如果你只是想以不同的方式做到这一点。
除此之外,您知道__getattr__
没有被instance.some_prop
的参考作为参考,对吧?由于描述符存在,因此不会调用__getattr__
。 (另外,这就是它起作用的原因)。
如果您需要拦截instance.some_prop
本身的引用,则需要实现__getattribute__
- 无条件地要求所有您的属性引用。
在这种情况下,我建议您无条件地致电super().__getattribute__
,然后检查该属性是否为some_prop
。如果没有,只需返回原始值。