首页 > 解决方案 > 基于用户输入的类创建自动化

问题描述

所以在python中,有一个getattr功能可以自动获取特定类的属性,这很公平。

我想做的是从用户输入创建一个类,类似于我可以使用getattr.

这是我正在考虑的过程:

# Define classes that the user could chose
class Person():
    def __init__(self):
        self.prop1 = 'hi'

# Define other classes

className = input()  # The user would then type a class name like Person
newObj = className()  # I would want this to evaluate like Person()

基本上,我试图不让我的代码看起来像一堆

if className == "Person":
    newObj = Person()
elif className == "Dog":
    newObj = Dog()

基本上,是否有任何内置函数可以通过字符串引用类?

标签: pythonclass

解决方案


如果两个类都__init__采用相同的参数,最简单的方法是使用映射字典。我下面的示例涉及一个厚颜无耻的错误处理,如果您将第二行分成几行,您可以避免这种情况。

mapping_dict = {'Person': Person, 'Dog': Dog}
instance = mapping_dict.get(user_input, lambda: print('Invalid class name'))()
# instance is None if an invalid input was provided

没有厚颜无耻的错误处理:

mapping_dict = {'Person': Person, 'Dog': Dog}
class_obj = mapping_dict.get(user_input)
if class_obj:
    instance = class_obj()
else:
    print('Invalid class name')

推荐阅读