动态创建类python的实例

Rod*_*igo 6 python oop class

我是 python 新手,我正在尝试在类中动态创建新实例。所以让我给你举个例子,如果我有一个这样的类:

class Person(object):
    def __init__(self, name, age, job):
        self.name = name
        self.age = age
        self.job = job
Run Code Online (Sandbox Code Playgroud)

据我所知,对于我必须插入的每个新实例,我必须声明一个变量并将其附加到 person 对象,如下所示:

variable = Person(name, age, job)
Run Code Online (Sandbox Code Playgroud)

有没有办法可以动态地做到这一点?假设我有一本这样的字典:

persons_database = {
'id' : ['name', age, 'job'], .....
}
Run Code Online (Sandbox Code Playgroud)

我可以创建一段代码来迭代这个数据库并在Person类中自动创建新实例吗?

rfj*_*001 5

只需使用 for 循环遍历字典即可。

people = []
for id in persons_database:
    info = persons_database[id]
    people.append(Person(info[0], info[1], info[2]))
Run Code Online (Sandbox Code Playgroud)

然后列表people将包含Person带有来自您的persons_database 字典的数据的对象

如果您需要从原始 id 中获取 Person 对象,您可以使用字典来存储 Person 对象,并可以快速找到正确的 Person。

people = {}
for id, data in persons_database.items():
    people[id] = Person(data[0], data[1], data[2])
Run Code Online (Sandbox Code Playgroud)

然后你可以通过他/她的 id 获取你想要的人people[id]。所以要增加一个 id = 1 的人的年龄,你会这样做people[1].increment_age()

------ 下面稍微高级一点的素材------

有些人提到使用列表/字典理解来实现您想要的。Comprehensions 会更高效,更 Pythonic,但如果你不熟悉编程/python,理解起来会更困难一些

作为字典理解,第二段代码是 people = {id: Person(*data) for id, data in persons_database.items()}

所以这里没有什么是无法解释的...... *python 中的 List 将 List 解包为列表顺序中的单独项目,因此对于l长度为 n的 List ,*l将评估为l[0], l[1], ... , l[n-2], l[n-1]