我想覆盖某些第三方代码的内部函数。这是我的意图的一个例子。
(编辑:我已经纠正了下面的拼写错误,现在确实按预期工作)
#--- 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?
[结论:由于拼写错误,这只是失败了。谢谢你的帮助!]
答案 0 :(得分:1)
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
之后更改该模块的代码将无法帮助。< / p>
答案 1 :(得分:1)
在您提供的代码中,确保在重新定义_bark函数时没有忘记下划线。 如果你想改变一个类的方法,一个好主意是继承该类并覆盖你的类中的方法。