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

时间:2016-01-19 03:35:00

标签: python variables configparser

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

我的.ini看起来像这样:

[Pers1]
name = Alice

[Pers2]
name = Bob

...

[Pers25]
name = Xavier

我还有一个class Person,它接受​​参数name,以便ExamplePerson = Person("Jim")创建一个新的Person对象,其属性ExamplePerson.name为{{1} }}。

到目前为止,我已经想出了如何读取.ini文件,但我无法弄清楚如何编写一个从文件中获取文件并从中制作对象的函数。

我可以手动创建变量:"Jim",但我不知道如何编写如下内容:

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)结束,或者.ini文件中有很多人。

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

这可能有助于澄清:

"Pers1"

2 个答案:

答案 0 :(得分:2)

在Python中存储命名对象集合的惯用方法是使用字典,对于你来说这可能看起来像

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

答案 1 :(得分:1)

请勿尝试动态创建变量名称。而是在字典中创建

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