获取从模块中的特定类派生的类

时间:2012-11-01 08:42:54

标签: python python-2.7 superclass

我需要从模块中获取只派生自特定TargetClass的类:

import mymodule as t
for att in dir(t):
   someclass = getattr(t, att)
   if isinstance(someclass, TargetClass):
       print ("Do something with %s" % att)

嗯......这不起作用,所以如果模块的属性不可调用,我需要创建实例并捕获异常:

import mymodule as t
for att in dir(t):
   someclass = getattr(t, att)
   try:
       if isinstance(someclass(), TargetClass):
           print ("Do something with %s" % att)
   except:
       pass

那么我如何只获取mymodule中的那些类,即某些TargetClass的子类,而不创建实例并捕获异常?

1 个答案:

答案 0 :(得分:4)

您可以使用issubclass代替isinstance, 但基本上你会遇到同样的问题,因为issubclass的第一个参数必须是一个类。所以你可以把它们结合起来:

import mymodule as t
for att in dir(t):
   someclass = getattr(t, att)
   if isinstance (someclass, type) and issubclass(someclass, TargetClass):
       print ("Do something with %s" % att)