Python 使类在init上导入其他类

Python 使类在init上导入其他类,python,oop,import,Python,Oop,Import,我有以下文件夹结构: pkg1 \ | |\ | |__ subpkg1 __ main_class.py | |__ subpkg2 __ mixin_class.py | \ ... main_class.py包含main类定义,而mixin_class.py包含我需要的具有有趣功能的MixinClass。该功能使基于MainClass的对象可以刮取其目录,向下搜索,找到名称与给定正则表达式模式匹配的所有模块,然后实

我有以下文件夹结构:

pkg1 \
      |
      |\
      | |__ subpkg1 __ main_class.py
      | |__ subpkg2 __ mixin_class.py
      |
       \ ...
main_class.py包含main类定义,而mixin_class.py包含我需要的具有有趣功能的MixinClass。该功能使基于MainClass的对象可以刮取其目录,向下搜索,找到名称与给定正则表达式模式匹配的所有模块,然后实例化它们并将它们放入MainClass的列表中

现在,我需要调整mixin_class.py中的逻辑,该逻辑导入找到的模块并从中实例化类,以便在基于MainClass的对象不在包pkg1中时使其能够运行

|
some_dir \
|         |__ class_implementing_main_class.py
|         |__
|            \ sub_dir \
|                       |__ class_for_import_1.py
|                       |__ class_for_import_1.py
|                    
|
pkg1 \
|     |
|     |\
|     | |__ subpkg1 __ main_class.py
|     | |__ subpkg2 __ mixin_class.py
|     |
|       \ ...
我一直在尝试使用相对导入,但我感觉在执行MixinClass逻辑时,导入是相对于pkg1-subpkg2中该MixinClass的路径的:

class MixinClass:
    _FOLDERS_TO_AVOID_REGEX = r"__\w+__"

    def __init__(self, small_step_regex):
        self.small_step_regex = small_step_regex

    def _find_and_import_objects(self, from_dir, into_list):
        # pdb.set_trace()
        module_paths = self.scan_for_module_paths(from_dir)
        if len(module_paths):
            for module in module_paths:
                self._import_objects(module, into_list)
            return True

    def scan_for_module_paths(self, dir_path):
        modules = []
        for root, dirs, files in os.walk(dir_path):
            for file_name in files:
                if re.match(self.small_step_regex, file_name):
                    relative_file_path = Path(os.path.join(root, file_name)).relative_to(dir_path)
                    if not re.search(self._FOLDERS_TO_AVOID_REGEX, str(relative_file_path)):
                        modules.append(relative_file_path)
        return modules

    def _import_objects(self, from_module, into_list):
        pdb.set_trace()
        path_parts=Path(from_module).parts
        module_name = ".{}".format(path_parts[-1].split(".")[0])
        package_path = ".{}".format(".".join(path_parts[:-1]))
        try:
            # pdb.set_trace()
            module = importlib.import_module(module_name, package_path)
            for mem_name, obj in inspect.getmembers(module):
                if inspect.isclass(obj) and inspect.getmodule(obj) is module:
                    into_list.append(obj())
        except ImportError:
            print("Failed import of module {} from package {}".format(module_name, package_path))
当从MainClass调用时,方法_find_和_import_objects()是此Mixinclass逻辑的入口点

关于如何调整此逻辑以使importlib.import_module()查看目录本地到from_dir参数传递到方法_find_和_import_objects(),有什么想法吗