这适用于脚本,以识别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
第二个例子有效,出于某种原因,在声明类的同一个模块中调用此函数不会。
答案 0 :(得分:4)
'namespace'只是一个模块对象,类也是如此。您始终可以将该类分配给其他名称:
RefClass = myproject.aa.RefClass
或更好的是,将其直接导入您自己的命名空间:
from myproject.aa import RefClass
无论哪种方式,现在你有一个引用类对象的全局名称RefClass
,所以你可以这样做:
isinstance(a, RefClass)