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