1

我需要从仅从特定 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 的子类,而不创建实例并捕获异常?

4

1 回答 1

4

您可以使用issubclassinstead of isinstance,但本质上您会遇到同样的问题,因为 to 的第一个参数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)
于 2012-11-01T08:46:59.153 回答