动态创建类python的实例

时间:2015-08-06 03:50:00

标签: python class oop

我是python中的新手,我试图在类中动态创建新实例。那么,让我举个例子,如果我有这样的课程:

<pre id="results"></pre>

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

class Person(object):
    def __init__(self, name, age, job):
        self.name = name
        self.age = age
        self.job = job

有没有办法动态地做到这一点?让我们假设我有一个这样的字典:

variable = Person(name, age, job)

我可以创建一段代码来迭代这个数据库并自动在persons_database = { 'id' : ['name', age, 'job'], ..... } 类中创建新实例吗?

2 个答案:

答案 0 :(得分:1)

使用for循环遍历字典。

people = []
for id in persons_database:
    info = persons_database[id]
    people.append(Person(info[0], info[1], info[2]))

然后,列表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])

然后你可以通过people[id]从他/她的身份中找到你想要的人。因此,为了增加id = 1岁的人,您可以people[1].increment_age()

------下面有一些更高级的材料----------------

有些人提到使用列表/字典理解来实现你想要的。理解会更有效率和更多pythonic,但如果你是编程/ python的新手,则更难理解

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

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

答案 1 :(得分:0)

当然,一个简单的list comprehension应该可以解决问题:

people = [Person(*persons_database[pid]) for pid in persons_database]

这只是循环遍历person数据库中的每个键(id),并通过将该id的属性列表直接作为args传递给Person()构造函数来创建person实例。