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