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

时间:2015-07-11 22:05:19

标签: python python-2.6

这适用于脚本,以识别a是否为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会抛出,因为它无法识别该类的实例。但如果我将这个主要文件复制到另一个模块中,它将起作用:

import aa.referencedatatable

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

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

1 个答案:

答案 0 :(得分:4)

'namespace'只是一个模块对象,类也是如此。您始终可以将该类分配给其他名称:

RefClass = myproject.aa.RefClass

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

from myproject.aa import RefClass

无论哪种方式,现在你有一个引用类对象的全局名称RefClass,所以你可以这样做:

isinstance(a, RefClass)