这个问题是关于类型比较,而不是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测试)