我正在尝试创建一个Fruit对象,但我不完全知道要创建哪个水果。
我有一个字典,可将所有类加载到字典中。
fruits = {'Apple': <module 'Apple' from '.'>, 'Orange': <module 'Orange' from '.', 'Banana': <module 'Banana' from '.'>
然后我有一个变量,其中包含我要创建的水果名称。因此,我可以将其设置为Apple,Orange或Banana。
myfruit = 'Orange'
我也有一些简单的课程。
class Apple:
def __init__(self):
pass
class Orange:
def __init__(self):
pass
class Banana:
def __init__(self):
pass
我想基本上根据myfruit变量设置为对象。
fruit_obj = myfruit()
我的最终游戏是能够为各种事物创建大量的类,然后每当设置myfruit时,它都会创建该类型的对象。
编辑: 这就是我将密钥(文件名)加载到模块的过程。
def load_up(path):
COMMAND_FOLDER = path + '/'
commands = [f for f in listdir(COMMAND_FOLDER) if isfile(join(COMMAND_FOLDER, f)) and f[-3:] == '.py']
commands_map = {}
for command in commands:
name = command[:-3]
path = COMMAND_FOLDER + command
spec = spec_from_file_location(name, path)
foo = module_from_spec(spec)
spec.loader.exec_module(foo)
commands_map[name] = foo
return commands_map
答案 0 :(得分:4)
在导入各种类之后,您可以通过使用字典将fruit_name
映射到要创建的class
来做到这一点
from module import Orange, Apple, Banana
fruits = {'Apple': Apple, 'Orange': Orange, 'Banana': Banana}
myfruit = 'Orange'
fruit_obj = fruits[myfruit]() # -> creates an object of type Orange
在module.py
中具有以下类别:
class Apple:
def __init__(self):
pass
class Orange:
def __init__(self):
pass
class Banana:
def __init__(self):
pass