从用户输入创建对象

creating an object from user input

所以我是 python 的新手,我想制作一个程序,根据用户输入创建一个 class 的对象,所以我不必将 10 设为空配置文件。我这样试过,知道它会是假的,但我认为它证明了我的问题。

class Profile():
    def __init__(self, weight, height):
        self.weight = weight
        self.height = height

def create_object():
    name = input("What's your name?")
    new_weight = input("What's your height?")
    new_height = input("What's your weight?")

    name = Profile(new_weight, new_height)
    return name

如果我现在要创建对象:

>>> create_object()
What's your name? test 
What's your height? 23 
What's your weight? 33
<__main__.Profile object at 0x000002564D7CFE80>

>>> test()
Traceback (most recent call last):
File "<pyshell#35>", line 1, in <module>
    test()
NameError: name 'test' is not defined

或者我应该使用字典吗?如果是,怎么办?

根据我的经验,没有必要具体命名 class 的每个实例。相反,您可以按照一些评论者的建议将每个新对象添加到字典中,如下所示:

object_dict = {}
for i in range(10):
    name = input("what's your name")
    object_dict[name] = create_object()

这里要注意的区别是我将您的函数的名称部分移到了 create_object() 范围之外。据我所知,没有“简单”或“干净”的方法可以在 python 中使用字符串作为用户输入来创建变量(尤其是如果您是 python 的新手)。

如果你做的事情不一定需要名字,用户的详细信息只是为了数据存储,那么在你的[=29]中将名字保存为一个属性会更简洁=],像这样:

class Profile():
    def __init__(self, weight, height, name):
        self.weight = weight
        self.height = height
        self.name = name

然后当您生成配置文件时,只需将它们添加到列表中即可:

for i in range(10):
    object_list.append(create_object())

最后一件事,输入法总是returns一个字符串。因此,如果您打算对体重和身高值进行数学运算,则需要将输入从字符串更改为数字,您可以通过将 input() 调用包围在 int() 中来实现,例如

weight = int(input("What's your weight?"))
height = int(input("What's your height?"))