2013-10-12 19 views
5

pythonでは、抽象メソッドのデコレータを派生した実装に持ち帰る方法はありますか?例えば抽象メソッドのデコレータ

は、

import abc 

class Foo(object): 
    __metaclass__ = abc.ABCMeta 

    @abc.abstractmethod 
    @some_decorator 
    def my_method(self, x): 
     pass 

class SubFoo(Foo): 
    def my_method(self, x): 
     print x 

SubFoomy_methodに私の知る限りsome_decoratorが飾られません。それぞれの派生クラスを個別に飾ることなく、これを実現できる方法はありますか?Foo

+0

私は恐ろしい魔法を使うだけです。抽象メソッド '_my_method'を呼び出し、基本的に' some_decorator(self._my_method)(* args、** kwds) 'を行う非抽象型で、オーバーライドされていない' my_method'を持っていますか? – delnan

+0

@delnanええ、ええ、大規模なメタクラスの魔法とあなたの良い提案の間の解決策があるかもしれないと思っていました。しかし、私は私がしなければならないことをやることをやるだろう。 –

答えて

0

私の解決策は、スーパークラスのメソッドをオーバーライドせずに拡張することです。

import abc 

class Foo(object): 
    __metaclass__ = abc.ABCMeta 

    @abc.abstractmethod 
    @some_decorator 
    def my_method(self, x): 
     pass 

class SubFoo(Foo): 
    def my_method(self, x): 
     super().my_method(x) #delegating the call to the superclass 
     print x 
関連する問題