子模块对Python类Monkeypatching的影响

2024-09-24 06:34:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我有三个模块:

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时,我得到了monkey修补IN类并用IN2类替换它的期望行为。你知道吗

我想了解在这种情况下,in_mod.IN = IN2module1.IN = IN2之间的根本区别是什么。你知道吗

我是一个相关的职位。你知道吗


Tags: theinpyimportselfmodobjectinit
1条回答
网友
1楼 · 发布于 2024-09-24 06:34:24

from module import IN创建引用module.IN的局部变量;module.ININ是对同一类的两个独立引用。IN = IN2更改本地引用,但module.IN(由module.C使用)继续引用同一类。你知道吗


更新

在您的编辑中,module1.INmodule1命名空间中的全局变量,最初引用了in_mod中的类,但与module命名空间中的全局in_mod.IN不同。更改其值根本不会影响in_mod。无法通过module1直接访问in_mod的命名空间,因为您不导入整个模块,只导入模块中的一个值。你知道吗

相关问题 更多 >