如何解决从子文件夹中的文件动态导入名称相同的类
我需要从子文件夹中的文件中动态导入名称相同的类。这些类在每个文件中都有不同的实现。导入后,我需要为每个类创建一个实例并将它们存储在数据结构中,以便可以在您的实例中调用每个函数。
文件夹结构:
./main.py
./players/player1.py
./players/player2.py
./players/player3.py
./players/player4.py
player1.py
class PlayerClass():
def doStuff():
stuff implementation 1
player2.py
class PlayerClass():
def doStuff():
stuff implementation 2
因此main.py将从这些文件中导入所有PlayerClass,并为每个实例创建一次实例,然后才能在每个实例中调用doStuff之类的函数。 像这样:
importedClasses[0].doStuff()
我设法提取了文件名,但是我无法从子文件夹中进行导入,也无法将它们作为唯一对象导入并存储在列表或类似文件中。
解决方法
这是一种方法
from glob import glob
from importlib.machinery import SourceFileLoader
modules = sorted(glob('players/player*.py'))
imported_classes = list(map(lambda pathname: SourceFileLoader(".",pathname).load_module().PlayerClass(),modules))
imported_classes[0].doStuff()
在这里,我们使用glob
将路径名与我们要导入的模块进行匹配。然后使用importlib
模块(SourceFileLoader
)导入它们。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。