Python根据变量名创建对象

Dor*_*tos 3 class python-3.x

我正在尝试创建一个 Fruit 对象,但我不知道要创建哪种水果。

我有一本字典,将所有类加载到字典中。

fruits = {'Apple': <module 'Apple' from '.'>, 'Orange': <module 'Orange' from '.', 'Banana': <module 'Banana' from '.'>
Run Code Online (Sandbox Code Playgroud)

然后我有一个变量,其中包含我想要创建的水果名称。所以我可以将其设置为“Apple”、“Orange”或“Banana”。

myfruit = 'Orange'
Run Code Online (Sandbox Code Playgroud)

我也有一些简单的课程。

class Apple:
    def __init__(self):
        pass

class Orange:
    def __init__(self):
        pass

class Banana:
    def __init__(self):
        pass
Run Code Online (Sandbox Code Playgroud)

我基本上想根据 myfruit 变量设置的值创建一个对象。

fruit_obj = myfruit()
Run Code Online (Sandbox Code Playgroud)

我的最终目标是能够为各种事物创建大量的类,然后每当设置 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
Run Code Online (Sandbox Code Playgroud)

Reb*_*que 6

导入各种类后,您可以这样做,使用字典将 映射fruit_nameclass要创建的

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
Run Code Online (Sandbox Code Playgroud)

具有以下课程module.py

class Apple:
    def __init__(self):
        pass

class Orange:
    def __init__(self):
        pass

class Banana:
    def __init__(self):
        pass
Run Code Online (Sandbox Code Playgroud)