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, *args, **kwargs):
return
我想做的是只返回从导入的文件中继承自BaseClass的那个类,也就是在这个例子中,SomeClassA。有没有什么办法可以做到这一点呢?
2 个回答
4
一旦你导入了你的模块,就可以遍历它的命名空间,寻找那些是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)]
8
你可以通过使用 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