簡體   English   中英

Python - 從導入的模塊中獲取類的類

[英]Python - Get class of type from imported module

我試圖從具有動態名稱的文件中導入一個類。 這是我的文件導入程序:

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。 有沒有辦法做到這一點?

您可以通過使用issubclass檢查模塊中的符號來執行此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)]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM