python - 基于用户输入的类创建自动化
问题描述
所以在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()
基本上,是否有任何内置函数可以通过字符串引用类?
解决方案
如果两个类都__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')
推荐阅读
- c# - EF 无法识别新属性
- android - 寻找 emoji 库或 SDK for android 在键盘中使用它
- angular - 为什么不在 Angular 中直接与 DOM 交互?
- kubernetes - kubernetes 在 pod 中使用具有 root 用户的 nfs 持久卷
- docker - 是否可以在容器内获得指定的 docker ram 限制?
- python - tensorflow - tf.data.Dataset 在批处理之前随机跳过样本以获得不同的批次
- confluence - 使用变量并在内容中显示
- java - 带有背景加载的imageview中的Javafx中心图像
- javascript - 如何在网站上的 github 上获取最新提交
- azure - 推荐实践如何在 Azure Function local.settings.json 文件中包含更复杂的配置 JSON 数据?