2016-12-27 11 views
-1
class Foo(object): 
     def static_var(): 
      def decorator(func): 
       setattr(func, "different", "think different") 
       return func 
      return decorator 
     @static_var() 
     def think(self): 
      pass 

上記のコードを見ると、print Foo()。think.differentと入力すると、出力は「think different」になります。しかし、問題は、私はこれを得るために魔法を使うべきです、どうすればいいですか?ありがとう。クラス内のデコレータを定義pythonマジックメソッドを使用してクラスのメソッドに属性を設定する方法

答えて

0

を行うには、不必要に複雑な方法だ:

class Foo(object): 

    def think(self): 
     pass 

    setattr(think, "different", "think different")  



print(Foo().think.different) 
0

あなたは未定義の属性が呼び出されたときに呼び出され、__getattr__()で見たいと思うかもしれません。または、すべての属性に対して呼び出される__getattribute__()を使用します。required属性が呼び出されたときに、メソッドを返します。ここで私はあなたがpythonでオブジェクトをself.attribute

+0

__getattribute__()内部にすべてをされて使用してメソッドを呼び出す場合は、無限ループにつながる可能性がある。この__getattribute__()を使用するように注意してください

class A(object): def __init__(self): pass def printer(self,input): print(input) def __getattr__(self,atr): if atr == 'methd': return self.printer 

を必要とするものだと思います。したがって、クラスメソッドを指すように属性を設定できます。 – dhishan

関連する問題