说我正在导入一个库,该库具有我正在编写的程序的一些核心功能。它看起来像:
class dothing(object):
def __init__(self):
# stuff
def main(self):
self.thing = []
self.option = []
如何在不触及库本身的情况下修改其变量的内容 - 换句话说,从我的本地代码。或者,我如何修改功能" main"?
我听说过猴子补丁"但我不确定这是正确的事情
答案 0 :(得分:0)
定义另一个继承自原始类的类并覆盖" main"方法如下:
class doOtherThing(dothing):
def main(self):
self.thing = [1] # this is just a value different from [] in the original "main"
答案 1 :(得分:0)
如果你想改变main
功能,你确实可以使用猴子补丁。如果您想要改变整个类donothing
的行为方式,这是首选策略。
class dothing(object):
def __init__(self):
# stuff
def main(self):
self.thing = []
self.option = []
def my_new_main(self):
print("Hello")
self.thing = {}
self.option = ["Foo"]
donothing.main = my_new_main
dn = donothing()
dn.main()
# Hello
dn.thing
# {}
dn.option
# ["Foo"]
您还可以使用此策略将新方法附加到donothing
。
donothing.bar = lambda self, x: x + 3
dn.bar(1)
# 4