如何在python中覆盖导入类中的类调用?

时间:2015-06-22 14:24:31

标签: python class inheritance

假设我在modul1中有以下脚本:

class IN(object):
    def __init__(self):
        pass

class C(object):
    def __init__(self, x):
        pass

    def func(self):
        cl = IN()

然后我想在另一个脚本中使用C类:

from modul1 import C 

class IN(object):
    def __init__(self):
        pass

class C2(C):
    def __init__(self, x):
        C.__init__(self, x)

我可以通过在C类中创建一个具有相同名称的方法来覆盖C2类的func方法。

但是如何在调用者modul1中使用C类覆盖导入的IN类内的modul2 IN类的任何调用?
我想更改原始IN类的一些功能。我希望C类在行中调用

cl = IN()

我自己的IN()类,其功能已更改。

1 个答案:

答案 0 :(得分:0)

module1.py:

class IN(object):
    def __init__(self):
        print "i am the original IN"

class C(object):
    def __init__(self, x):
        pass

    def func(self):
        print "going to create IN from C's func"
        cl = IN()

module2.py:

import module1

class IN(object):
    def __init__(self):
        print "I am the new IN"

class C2(module1.C):
    def __init__(self, x):
        super(C2, self).__init__(x)


print "\n===Before monkey patching==="
C2(1).func()
#monkey patching old In with new In
module1.IN = IN
print "\n===After monkey patching==="
C2(1).func()

运行脚本module2.py时的输出:

===Before monkey patching===
going to create IN from C's func
i am the original IN

===After monkey patching===
going to create IN from C's func
I am the new IN

您可以看到如何调用module2的In构造函数。