0
我想猴子補丁私人和部分類的功能,但我也想調用修補功能。在python 2中調用老功能的猴子補丁私人實例功能
例子:
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