我希望我的班,以检查是否:解决:检查类属性:方法,属性或不存在
- 所需的属性存在
- 如果它是一个方法,它应该返回方法的结果
- 如果它是一个属性,返回值
- 如果不存在,引发一个AttributeException
我的解决方案(不工作):
class A:
def __getattr__(self, item):
try:
return self.item()
except AttributeError:
try:
return self.item
except AttributeError:
raise AttributeError
y = 2
def x(self):
return 1
我的测试:
a = A()
print(a.x)
我的结果:
<bound method A.x of <__main__.A object at 0x7f992de18c50>>
正如你所看到的,它返回到函数的引用,而不是它的结果。我哪里做错了?
[UPD]:嗯,也许我的英语很糟糕,所以我不能告诉我的想法是正确的。 无论如何,我的问题是通过使用解决
@property
装饰。 我只想要 - 将方法称为属性
'__getattr__'是只对传统方式找不到的标识符进行调用 - 访问“ax”不会调用该方法。这同样适用,因为你的实现也被破坏了 - self.item将是属性* named *'item',而不是具有字符串参数'item'的名称的属性。 – jonrsharpe