Python 模块重新加载时的isinstance行为

Python 模块重新加载时的isinstance行为,python,import,reload,isinstance,Python,Import,Reload,Isinstance,给定以下两个.py文件: 一类 class A(object): pass main.py def importer(klass): """ Used to import classes from there python qalname """ import_ = lambda m, k: getattr(__import__(m, fromlist=k), k) klass = klass.split('.') module = '.

给定以下两个.py文件:

一类

class A(object):
    pass
main.py

def importer(klass):
    """
    Used to import classes from there python qalname
    """
    import_ = lambda m, k: getattr(__import__(m, fromlist=k), k)
    klass = klass.split('.')
    module = '.'.join(klass[:-1])
    klass = klass[-1]
    return import_(module, klass)

from aclass import A

import_A = importer('aclass.A')
print isinstance(A(), import_A)  # Expected to be true 
print isinstance(import_A(), A)  # Expected to be true 
在这个阶段,一切正常(我的程序打印
True\nRUE
) 但是如果我修改
导入程序
方法以强制重新加载,即:

这一行:

    import_ = lambda m, k: getattr(__import__(m, fromlist=k), k)
替换为:

    import_ = lambda m, k: getattr(reload(__import__(m, fromlist=k)), k)
我的程序返回

False
False

我不理解这种行为。

重新加载模块意味着重新执行其内容,在本例中是
类a(对象):pass
。因此它创建了另一个不同的类。这与以下行为相同:

class A(object):
    pass
a = A()
class A(object):          # a different class
    pass
print isinstance(a, A)    # False

这足以解释为什么裸
reload()
通常是个坏主意。我相信其他人可以指向实现更复杂的重新加载过程的框架,例如,修补旧类以将其视为等同于新类。

其他人可以指向框架
,我希望其他人能向我指出这样的实现!有关更多信息: