この質問は、Python オブジェクトではなく、型の比較に関するものです。より正確には、__main__
module で定義された型が によってインポートされた型と異なる理由importlib.import_module()
。test2()
すべてのタイプが によってインポートされた場合、問題は発生しないことに注意してください ( ) importlib.import_module()
。
m.pyというモジュールがある場合:
class A(object):
pass
class B(A):
pass
def test1():
# pass
assert issubclass(B, A)
# prepare test with imported module
from importlib import import_module
m = import_module('m')
# pass
assert issubclass(m.B, m.A)
# fail
assert issubclass(m.B, A)
# fail
assert m.A is A
assert m.B is B
def test2():
from importlib import import_module
m0 = import_module('m')
m1 = import_module('m')
assert m0.A is m1.A
assert m0.B is m1.B
assert issubclass(m0.B, m1.A)
if __name__ == '__main__':
import sys
if len(sys.argv) == 2:
if sys.argv[1] == 'test1':
test1()
if sys.argv[1] == 'test2':
test2()
なぜpython m.py test1が失敗し、なぜpython m.py test2が失敗しないのですか? (py2.7.x および py3.4.x でテスト済み)