如何在程序 运行 时按程序分配更多变量?

How do I procedurally assign more variables while the program is running?

我正在编写一个程序,使用 configparser.py 从 .ini 文件中读取数据,以便我可以根据文件中的信息创建一个 Person 对象。

我的 .ini 看起来像这样:

[Pers1]
name = Alice

[Pers2]
name = Bob

...

[Pers25]
name = Xavier

我还有一个 class Person 接受参数 name,这样 ExamplePerson = Person("Jim") 创建一个新的 Person 对象,属性 ExamplePerson.name"Jim"

到目前为止,我已经想出了如何读取 .ini 文件,但我不知道如何编写一个函数来获取文件并从中制造对象。

我可以手动创建变量:Person1 = Person(name_from_ini_file),但我不知道如何写这样的东西:

def make_objects_from_file(file_name):
    # read file_name, etc
    # get name from .ini file, store it as new_name
    # for item in file:
    PersX = Person(new_name)
    # PersX is Pers1 for the first object, then Pers2, and so on

这样我就可以调用 make_objects_from_file(persons.ini) 并以 Pers1 = Person("Alice"), Pers2 = Person("Bob"), ...Pers25 = Person("Xavier) 结尾,或者不管 .ini 文件中有多少人。

但是,我不知道如何创建初始 Pers1 ... Per25 变量。我研究过对象工厂,但要么是我误读了它们的工作方式,要么是它们无法动态生成更多变量。我不能只输入 Pers1 = ... , Pers2 = ... , Pers3 = ...;我需要一种在代码中制作 Pers1 ... 的方法。不是字符串 "Pers1",而是实际变量。

这可能有助于澄清:

NEW_OBJECT               =     Person(name)
    ^                            ^
I have no idea how to        I know exactly how to make this
make this

不要尝试动态创建变量名。相反,在字典中创建 keys

people = {}
def make_objects_from_file(file_name):
    ...
    people["Pers1"] = Person(new_name)
    people["Pers2"] = Person(new_name)
    # etc

在 Python 中存储命名对象集合的惯用方法是使用字典,对您来说这可能类似于

names_list = ["alice","bob"] #from your file
people = {"Pers"+str(i):Person(name) for i,name in enumerate(names_list)}