Python类的意外行为(importlib x import subsystem)

时间:2014-07-02 13:16:29

标签: python python-3.x python-2.x python-importlib

这个问题是关于类型比较,而不是python对象。更准确地说,为什么__main__模块中定义的类型与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测试)

0 个答案:

没有答案