我需要从模块中获取只派生自特定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的子类,而不创建实例并捕获异常?
答案 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)