导入后修改库函数

时间:2017-06-02 14:39:01

标签: python

说我正在导入一个库,该库具有我正在编写的程序的一些核心功能。它看起来像:

class dothing(object):
    def __init__(self):
        # stuff

    def main(self):
        self.thing = []
        self.option = []

如何在不触及库本身的情况下修改其变量的内容 - 换句话说,从我的本地代码。或者,我如何修改功能" main"?

我听说过猴子补丁"但我不确定这是正确的事情

2 个答案:

答案 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