在 isinstance 中仅使用 class 不带名称空间的名称

Use only class name without namespace in isinstance

这在脚本中有效以识别 a 是否属于 class myproject.aa.RefClass

isinstance(a, myproject.aa.RefClass)

但是我该怎么做才能不必指定完整的命名空间?我希望能够输入:

isinstance(a, RefClass)

这在 Python 中是如何完成的?

编辑:让我提供更多细节。

在模块 aa.referencedatatable.py 中:

class ReferenceDataTable(object):
    def __init__(self, name):
        self.name = name

    def __call__(self, f):
        self._myfn = f
        return self

def referencedatatable_from_tag(tag):
    import definitions
    defn_lst = [definitions]
    for defn in defn_lst:
        referencedatatable_instance_lst = [getattr(defn, a) for a in dir(defn) if isinstance(getattr(defn, a), ReferenceDataTable)]
        for referencedatatable_instance in referencedatatable_instance_lst
            if referencedatatable_instance.name == tag
                return referencedatatable_instance
    raise("could not find")

def main()
    referencedata_from_tag("Example")

在模块 aa.definitions.py 中:

from aa.referencedatatable import ReferenceDataTable

@ReferenceDataTable("Example")
def EXAMPLE():
    raise NotImplementedError("not written")

出于某种原因,从 aa.referencedatatable.py 调用 main 将抛出异常,因为它将无法识别 class 的实例。但是,如果我将这个 main 复制到另一个模块中,它将起作用:

import aa.referencedatatable

a = aa.referencedatatable.referencedatatable_from_tag("Example")
print a

第二个示例有效,出于某种原因,在声明 class 的同一模块中调用此函数无效。

'namespace'只是一个模块对象,class也是。您始终可以将 class 分配给不同的名称:

RefClass = myproject.aa.RefClass

或者更好的是,将其直接导入到您自己的命名空间中:

from myproject.aa import RefClass

无论哪种方式,现在您都有一个引用 class 对象的全局名称 RefClass,因此您可以:

isinstance(a, RefClass)