을 상속 할 수 있습니까? 예를 들어, 은 마법으로을 a_foobar_method
에 적용 할 예정입니까?파이썬의 서브 클래스는 부모 클래스 장식
class FooBar(Foo):
def a_foobar_method(self):
...
을 상속 할 수 있습니까? 예를 들어, 은 마법으로을 a_foobar_method
에 적용 할 예정입니까?파이썬의 서브 클래스는 부모 클래스 장식
class FooBar(Foo):
def a_foobar_method(self):
...
장식자는 어떤 식 으로든 장식 된 클래스에 "표시"하지 않습니다. 당신은 단순히 Foo
자체를보고
@decorator
class Foo:
pass
또는
class Foo:
pass
Foo = decorator(Foo)
을 썼다인지 알 수있는 방법은 없습니다. 데코레이터는 사용 시점에 적용된 다음 잊어 버리게됩니다.
간단히 말해서, 아니요.
@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
의 추가 메소드 (또는 대체 된 메소드)에는 아무런 영향을주지 않습니다.
그 데코레이터는'Foo'의 메소드에도 적용되지 않습니다. – user2357112
당신은 그것을 시험해보고보아야합니다. –