2016-10-12 11 views

答えて

-1

デコレータは、装飾されたクラスをどのような方法でも「マーク」しません。あなたは、単にFoo自体を見ることで

@decorator 
class Foo: 
    pass 

または

class Foo: 
    pass 

Foo = decorator(Foo) 

を書いた場合は指示する方法はありません。デコレータは、使用時に適用された後、忘れられます。

3

要するに、

@my_decorator 
class Foo(Resource): ... 

あなたが今までFooを使用するだけの時間が一緒に、その後、コードのあなたの2枚をFooBarを定義することであるならば、単純に

class Foo(Resource): ... 
Foo = my_decorator(Foo) 

の省略形です。このと同等です:

class Foo(Resource): ... 
Foo_decorated = my_decorator(Foo) 
class FooBar(Foo_decorated): 
    def a_foobar_method(self): 
     ... 

またはこれまで:

class Foo(Resource): ... 
class FooBar(my_decorator(Foo)): 
    def a_foobar_method(self): 
     ... 

本当の答えはデコレータが何をするかによって異なります。原則として、クラスがオブジェクトとしてインスタンス化された後(例えば、__init__メソッドを変更するため)、メソッドのリストを調べると、FooBarのメソッドを見る機会が得られます。しかし、呼び出されたときにメソッドを実行してそれぞれに変更を加えると、FooBarの余分なメソッド(または置き換えられたメソッド)には影響しません。

関連する問題