如何将模块导入为 class?
How import module as class?
我在创建工厂时遇到了问题。
我有一个看起来像这样的目录:
classes/
file_1.py
file_2.py
....
factory.py
在 file_1
和 file_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_1
和 file_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
我在创建工厂时遇到了问题。
我有一个看起来像这样的目录:
classes/
file_1.py
file_2.py
....
factory.py
在 file_1
和 file_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_1
和 file_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