2016-12-10 16 views
0

在Python中,object.__getattr__()是在屬性查找未找到self的類樹中的屬性時調用的。如何識別__getattr__中的方法和屬性

我的問題是如何區分查找的方法和屬性。

class Test: 
    def __getattr__(self, name): 
     # How can I discern between methods and properties? 

t = Test() 
t.foo() # a function object should be returned 
t.bar # an object should be returned 

謝謝。

+4

從屬性訪問的角度來看沒有什麼區別。方法只是屬性*太*。 –

回答

-1

您可以使用callable()來完成此操作。

class Test: 
    def __getattr__(self, name): 
     if callable(name): 
      return name() 
     else: 
      return name 
+2

如果我想存儲方法以備後用,該怎麼辦? 't_foo = t.foo',然後再使用't_foo()'。 –

+0

這不是問題的一部分。他詢問如何區分方法和屬性......但是,您也可以使用__metaclass__'來存儲方法以備後用。但這不是問題的一部分。 –

+0

你怎麼知道這不是問題的一部分?這還不是很清楚,但是在新的Python編程人員中,方法調用與屬性查找存在某種差異,這是一種常見的誤解。 –