Как импортировать модуль как класс? - PullRequest
0 голосов
/ 22 ноября 2018

У меня была проблема, когда я хотел создать свою фабрику.

У меня есть каталог, который выглядит так:

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

В file_1 и file_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_1 и file_2 являются модулем, а не классом.

Так, какие еще способы я могу использовать, чтобы сделать свою фабрику?
И если есть несколькокакой самый лучший?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

после некоторых исследований и обсуждений я наконец-то нашел решение.

я добавил __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

0 голосов
/ 22 ноября 2018

Вы должны сделать

from classes.file_1 import class_in_file_1

Обратите внимание, что если вы используете python2, вам нужно создать файл __init__.py в каталоге classes.Нет проблем, если этот файл пуст

...