【发布时间】:2016-06-20 22:47:00
【问题描述】:
我有三个模块:
in_mod.py
class IN(object):
def __init__(self):
print("i am the original IN")
module1.py
from in_mod import IN
class C(object):
def __init__(self):
cl = IN()
和module2.py
from module1 import C
class IN2(object):
def __init__(self):
print("I am the new IN")
C()
import in_mod
in_mod.IN = IN2
C()
import module1
module1.IN = IN2
C()
当我使用module1.IN = IN2 时,我得到了猴子修补IN 类并用IN2 类替换它的期望行为。
我想了解in_mod.IN = IN2 和module1.IN = IN2 在这种情况下的根本区别。
我是referencing 相关帖子。
【问题讨论】:
-
IN = IN2shadowsmodule2中的导入版本,但实际上并没有改变module1。module1中的任何功能仍然可以看到以前的版本。您实际上要修补什么,为什么(例如为了测试)? -
在第一个示例中,
C2继承自module1.c,但在第二个示例中,您从module1导入C2,但从C继承 - 我不确定为什么。您能否详细说明一下您的“预期行为”是什么?为什么? -
是的,这是为了测试。我正在尝试用 IN2 模拟 IN。我正在尝试使用
from .. import测试导入的模块,但我无法更改它。
标签: python class inheritance monkeypatching