개인 및 클래스의 일부 기능을 원숭이 패치하고 싶지만 패치 기능을 호출하고 싶습니다.원숭이 패치 python 2의 private 인스턴스 함수 old 함수 호출
예 :
class SomeClass:
def __some_function(self, foo):
return do_something()
지금 내가 데코레이터로이 덮어 쓰기를 시도했지만 액세스 할 수없는 때문에 내가 이전 함수를 호출하는 문제가 있었다
def new_function(self, foo)
if foo == 'bar':
return True
return super(self).__some_function(foo)
SomeClass.__some_function = new_function
뭔가를 쓰고 싶어 . 또한 모의 라이브러리를 확인했지만 매개 변수를 사용하여 이전 함수를 호출하는 방법을 이해하지 못했습니다.
데코레이터 내가 시도 :이 오류가
def patch_something(method):
def new_function(self, foo):
if foo == 'bar':
return True
return method(self, foo)
return new_function
SomeClass.__some_function = patch_something(SomeClass.__some_function)
것은 (클래스가 다른 파일에 -이 문제인가?). 이중 밑줄 __
와
AttributeError: type object 'SomeClass' has no attribute '__some_function'
작동하지 않는 코드를 표시 할 수 있습니까? 덮어 쓴 메서드를 호출하려면 어딘가에 저장해야합니다. – syntonym
'__'이 (가)있는 속성은 이름이 변경되어 있습니다 (예 : https://docs.python.org/2/tutorial/classes.html#private-variables-and-class-local-references). 'SomeClass._someclass__some_function'에 의해 접근 할 수 있어야합니다. – syntonym
도움을 주셔서 감사합니다, 그것은 작동합니다 : D 조 : D 조. 이것은 원하는 답변입니다 (하지만 'SomeClass._SomeClass__some_function'이어야합니다). – ChristophLSA