首页 > 解决方案 > 在运行时加载自定义类

问题描述

我有下面的代码片段,我试图从一个名为的目录加载自定义类,source但不断收到错误消息module 'source' has no attribute 'custom_class_1_src'

文件夹结构:

main.py
source
   +----__init__.py
   +----custom_class_1_src.py
   +----custom_class_2_src.py

每个类的类名与第一个字母大写的文件相同,因此类名将在下面,并且两个文件中都有一个__init__方法:

 Custom_class_1
 Custom_class_2

主文件

import os, pathlib, importlib

def load_class(source, class_name):
    try:
        importlib.invalidate_caches()
        
        module = importlib.import_module('source', source)
        class_ = getattr(module, "{}".format(class_name))
        instance = class_()
    except Exception as ex:
        print(ex)

source_directory = str(pathlib.Path(__file__).parent.absolute()) + "/source/"
sources = sorted([f for f in os.listdir(source_directory) if os.path.isfile(os.path.join(source_directory, f)) and f.endswith('_src.py')])

for source in sources:
    class_name = source.replace("_src.py", "").capitalize()
    
    load_class(source, class_name)

custom_class_1_src.py

class Custom_class_1:

    def __init__(self):
        print("found one file")

标签: python-3.xpython-importpython-module

解决方案


推荐阅读