如何将模块导入为 class?

How import module as class?

我在创建工厂时遇到了问题。

我有一个看起来像这样的目录:

classes/
     file_1.py
     file_2.py
     ....
factory.py

file_1file_2 中,我有一些 classes 定义是这样的:

class A():
    ...

class B():
    ...

factory.py 中,我想创建一个 class,我可以在上面使用 getattr 函数。

我试过这样做:

from classes import file_1, file_2

class Factory(file_1, file_2):
    """doctring"""

def build(dic):
    factory = Factory()
    return getattr(dic['name'], factory)(**dic['params'])

但是 file_1file_2 是模块,而不是 class。

那么我可以使用哪些其他方法来制作我的工厂?
如果有几个,哪个最好?

谢谢。

你应该做

from classes.file_1 import class_in_file_1

请注意,如果您使用 python2,则需要在 classes 目录中创建 __init__.py 文件。如果该文件为空没问题

经过一番研究和讨论,我终于找到了解决办法。

我在 classes/ 文件夹中添加了一个 __init__ :

classes/
     __init__.py
     file_1.py
     file_2.py
     ....
factory.py

在这个文件中,我为每个文件添加了一个 from classes.file_1 import *

所以,在 factory.py 我只是做:

import classes

def build(dic):
    return getattr(classes, dic['name'])(**dic['params']))

我不知道这是否是最好的方法,但它工作正常。
感谢你们两个@enamoria 和@Norrius