2013-06-08 1 views
0

파이썬 (2.x)에 작성된 라이브러리가 있습니다. 해당 코드는 변경할 수 없습니다. lib 안에는 클래스 A가 있습니다. A :: method()의 동작을 수정해야합니다. 다른 많은 클래스가 있습니다 : 클래스 B, 클래스 C 등 (모두 lib에 속합니다). 그들은 모두 클래스 A를 어떤 방식 으로든 사용합니다. 모든 것은 내가 A 클래스를 상속받을 수없고 A :: method() 메소드를 오버라이드 (override) 할 수 없다는 것을 의미한다.클래스의 메소드 비헤이비어를 수정하는 방법은 무엇입니까? 파이썬, 클래스가 변경할 수없는 라이브러리에 속함

내가 아는 한, 파이썬 - 데코레이터 - 기술이 필요하다. 하지만 정확히 어떻게? 그런 솔루션의 샘플을 보여 주시겠습니까 ???

답변

1

당신이 시도 유무 :

from lib import A 

def my_method(instance, *args, **kwargs): 
    some_code_here() 

A.method = my_method 
+0

는 믿을 수 없었다지만 C의 10 년 후 일 : – mrCyber

+0

하지 ++는 다음과 같은 방식으로 생각하는 조금 조금 어렵습니다 :) 감사합니다! Тhen 다른 질문이 있습니다. Decorator는 무엇입니까? – mrCyber

+0

Decorator는 다른 함수를 반환하기 전에이를 수정하는 함수입니다. 여기에는 가능한 해결책이 될 수도 있지만, 여러 가지 다른 기능에 대해 반복적으로 수정해야하는 경우 데코레이터가 의미가 있습니다. –

관련 문제