[英]override (monkeypatch) a function in a 3rd party module used by other functions in that 3rd party module
我想覆盖一些第三方代码内部的函数。 这是我意图的一个例子。
(编辑:我已经纠正了下面的拼写错误,现在确实可以正常工作了)
#--- dog.py (3rd party code) ---
def _bark():
print("WOOF!")
def make_it_bark():
_bark()
#--- make_catlike.py (my code)---
import dog
dog._bark = lambda: print("MEOW") #<<-- 'bark' in original, so failed!!!!
dog.make_it_bark()
# edit: now prints out "MEOW" instead of "WOOF!" like I want
如何获得第三方dog.py代码以使用我的_bark版本?
[结论:这只是因为拼写错误而失败。 谢谢您的帮助!!]
您在make_catlike.py
有一个简单的错字---您缺少前划线。 整个文件应为:
#--- make_catlike.py (my code)---
import dog
dog._bark = lambda: print("MEOW")
# ^-------- Underscore was missing.
dog.make_it_bark() # Prints "MEOW".
请注意,在更复杂的情况下,其他类型的事情也可能出错。
例如,如果要更改的行为发生在导入模块时,则在 import dog
返回后更改该模块的代码将无济于事。
在提供的代码中,请确保在重新定义_bark函数时没有忘记下划线。 如果要更改类的方法,一个好主意是继承该类并在您的类中重写方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.