2016-12-10 4 views
0

Pythonでは、属性ルックアップでクラスツリーの属性がselfで見つからない場合、object.__getattr__()が呼び出されます。__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

属性アクセスポイントとの違いはありません。メソッドは属性* too *です。 –

答えて

-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コーダーの間では、メソッドの呼び出しが属性の検索とは多少異なるという誤解があります。 –

関連する問題