变量和模块的实例检查

时间:2014-10-21 12:48:13

标签: python class inheritance module instance

我有一个字符串列表,这些字符串都是导入的模块(我先前解析了__init__.py文件以进行其他验证)。例如mods = ['mod_one', 'mod_two', 'mod_three']。我现在需要验证所有这些都是预定义超类( skeleton.py )的实例 - 比如

for x in mods:
    if not isinstance(x.Operation,skeleton.OperationSkeleton): 
        print("error with: "+x)`

我的问题是x在这种情况下是一个字符串 - 显然,但是我要检查的导入模块的名称。该字符串没有Operation ..

奇怪的是......出于测试目的,我试图

print(isinstance(mod_one.Operation,skeleton.OperationSkeleton))

并打印False。 但是在mod_one.py OperationSkeleton skeleton导入class Clustering(ClusteringSkeleton):并创建了{{1}}。

1 个答案:

答案 0 :(得分:1)

如果您的模块已导入,则可以通过sys.modules mapping

中的名称访问它们
import sys

for x in mods:
    mod = sys.modules[x]
    if not issubclass(mod.Operation, skeleton.OperationSkeleton): 

您需要在此使用issubclass(),因为Operation不是实例。