我是 python 的新手,我正在尝试在类中动态创建新实例。那么让我举个例子,如果我有这样一个类:
class Person(object):
def __init__(self, name, age, job):
self.name = name
self.age = age
self.job = job
据我所知,对于我必须插入的每个新实例,我都必须声明一个变量并将其附加到 person 对象,如下所示:
variable = Person(name, age, job)
有没有一种方法可以让我动态地做到这一点?让我们假设我有一个这样的字典:
persons_database = {
'id' : ['name', age, 'job'], .....
}
我能否创建一段代码来迭代此数据库并自动在 Person
类中创建新实例?
最佳答案
只需使用 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 中得到你想要的人。因此,要增加 id = 1 的人的年龄,您可以执行 people[1].increment_age()
-------- 下面稍微高级一点的 Material ----------------
有些人提到使用列表/字典理解来实现你想要的。理解会稍微更有效率和更 pythonic,但如果你是编程/python 的新手,理解起来会有点困难
作为字典理解,第二段代码是people = {id: Person(*data) for id, data in persons_database.items()}
所以这里没有什么是无法解释的...... python 中的列表之前的 *
将列表按照列表的顺序将列表解包为单独的项目,因此对于列表 l
的长度为 n,*l
将计算为 l[0],l[1],...,l[n-2],l[n-1]
关于python - 动态创建类python的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31846508/