如何解决Python-从导入的模块中获取类型的类
| 我正在尝试从具有动态名称的文件中导入类。这是我的文件导入器:def get_channel_module(app,method):
mod_name = \'channel.%s.%s\' % (app,method)
module = __import__(mod_name,globals(),locals(),[method])
return module
这将导入特定的python文件,例如some_file.py,如下所示:
class SomeClassA(BaseClass):
def __init__(self,*args,**kwargs):
return
class SomeClassB():
def __init__(self,**kwargs):
return
我想做的是仅返回从导入文件扩展BaseClass的类,因此在本例中为SomeClassA。有什么办法吗?
解决方法
您可以通过使用
issubclass
检查模块中的符号来做到这一点:
def get_subclass(module,base_class):
for name in dir(module):
obj = getattr(module,name)
try:
if issubclass(obj,base_class):
return obj
except TypeError: # If \'obj\' is not a class
pass
return None
,导入模块后,请迭代其名称空间,以查找属于BaseClass子类的类对象。
klasses = [c for c in module.__dict__.values() if isinstance(c,type)]
base_subclasses = [c for c in klasses if issubclass(c,BaseClass]
## or as a single list comprehension
base_subclasses = [c for c in module.__dict__.values() if isinstance(c,type) and issubclass(c,BaseClass)]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。