我有三個模塊:對班級的Monkeypatching在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
時,我得到期望的行爲,即猴子修補IN
課程並將其替換爲IN2
課程。
我想了解in_mod.IN = IN2
和module1.IN = IN2
之間的根本差異是在這種情況下。
我是referencing a相關帖子。
'IN = IN2' * shadows *'module2'內的導入版本,但根本不會改變'module1'。 'module1'內的任何功能仍然會看到以前的版本。你究竟在嘗試修補什麼,以及爲什麼(例如測試)? – jonrsharpe
在第一個例子中,'C2'繼承自'module1.c',但第二個例子中,您從'module1'導入'C2',但從'C'繼承 - 我不知道爲什麼。你能否多說一下「預期的行爲」對你有什麼影響?爲什麼? – senderle
是的,這是測試。我試圖用IN2模擬出IN。我正在嘗試使用'from .. import'導入IN的模塊,我無法更改它。 – Pete