2016-10-12 4 views

답변

-1

장식자는 어떤 식 으로든 장식 된 클래스에 "표시"하지 않습니다. 당신은 단순히 Foo 자체를보고

@decorator 
class Foo: 
    pass 

또는

class Foo: 
    pass 

Foo = decorator(Foo) 

을 썼다인지 알 수있는 방법은 없습니다. 데코레이터는 사용 시점에 적용된 다음 잊어 버리게됩니다.

3

간단히 말해서, 아니요.

@my_decorator 
class Foo(Resource): ... 

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

에 대한 단순히 속기 유일한 시간은 당신이 이제까지 Foo 다음 함께 코드를 당신의 두 조각이에 동일, FooBar을 정의하는 것입니다 사용하는 경우입니다 :

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의 추가 메소드 (또는 대체 된 메소드)에는 아무런 영향을주지 않습니다.