[英]Python patch internal class __call__ method
我有一个 class B,我想对其进行单元测试。 class 在内部实例化另一个 class A 并通过它的call方法调用它。 如何修补 class A 及其init和 __call__methods?
class A:
def __init__():
....
def __call__():
....
class B:
def my_method():
a = A()
a()
def test_b_my_method():
...
您可以为此使用装饰器
class A:
def __init__(self):
self._foo = 1
def __call__(self):
return self._foo + 1
class B:
def my_method(self):
a = A()
return a()
def patch_init(fn):
def wrap(*args, **kwargs):
self = args[0]
fn(*args, **kwargs) # calls A.__init__(*args, **kwargs)
self._foo = 2
return wrap
def patch_call(fn):
def wrap(*args, **kwargs):
res = fn(*args, **kwargs) # calls A.__call__(*args, **kwargs)
return res * 2
return wrap
if __name__ == "__main__":
# unpatched
b = B()
print(b.my_method()) # prints 2 (self._foo + 1)
# patched
A.__init__ = patch_init(A.__init__)
A.__call__ = patch_call(A.__call__)
b = B()
print(b.my_method()) # prints 6 (self._foo + 1) * 2
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.