Python 获取从模块中的特定类派生的类
我需要从仅从特定TargetClass派生的模块中获取类:Python 获取从模块中的特定类派生的类,python,python-2.7,superclass,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
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的子类,而不创建实例和捕获异常?您可以使用
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)
您可以使用
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)
无论如何都需要捕捉异常:因为它可能引发类似“issubclass()arg 1必须是一个类”:@RaSergiy我想我在发布答案后不久的编辑中解释了这一点。还是我遗漏了什么?也许你是想评论另一个答案:)isinstance(someclass,type)不起作用,必须有实例:isinstance(someclass(),type)。。。因此,无论如何都要创建对象……我认为只有issubclass可以捕获异常。@RaSergiy不,我认为
isinstance(someclass,type)
可以工作,但只能在新样式的类上工作,因为旧样式的类不是type
的实例,而是classobj
。不过,尝试并捕获异常并没有什么不好的。但请避免在未指定预期异常类型的情况下使用except
。无论如何都需要捕获异常:因为它会引发类似“issubclass()arg 1必须是一个类”:@RaSergiy我想我在发布答案后不久的编辑中解释了这一点。还是我遗漏了什么?也许你是想评论另一个答案:)isinstance(someclass,type)不起作用,必须有实例:isinstance(someclass(),type)。。。因此,无论如何都要创建对象……我认为只有issubclass可以捕获异常。@RaSergiy不,我认为isinstance(someclass,type)
可以工作,但只能在新样式的类上工作,因为旧样式的类不是type
的实例,而是classobj
。不过,尝试并捕获异常并没有什么不好的。但请避免在未指定预期异常类型的情况下使用except
。