我希望我的班,以檢查是否:解決:檢查類屬性:方法,屬性或不存在
- 所需的屬性存在
- 如果它是一個方法,它應該返回方法的結果
- 如果它是一個屬性,返回值
- 如果不存在,引發一個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