2

この質問は、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 でテスト済み)

4

0 に答える 0