如何将模块导入为类?

时间:2018-11-22 10:22:18

标签: python python-3.x python-import

我想创建自己的工厂时遇到问题。

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

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

file_1file_2中,我这样定义了一些类:

class A():
    ...

class B():
    ...

factory.py中,我想创建一个可以使用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是模块,而不是类。

那么我还能用什么其他方式来制造工厂?
如果有几个,那是最好的?

谢谢。

2 个答案:

答案 0 :(得分:0)

您应该

from classes.file_1 import class_in_file_1

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

答案 1 :(得分:0)

经过研究和讨论,我终于找到了解决方案。

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

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