如何在程序 运行 时按程序分配更多变量?
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)}
我正在编写一个程序,使用 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)}