[英]Dynamically create instances of a class python
我是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]))
然后List 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]
從他/她的身份獲得你想要的people[id]
。 因此,為了增加id = 1的年齡的人,你會people[1].increment_age()
------下面稍微更高級的材料----------------
有些人提到使用列表/字典理解來實現你想要的。 理解會更高效,更pythonic,但如果你是編程/ python的新手,會更難理解
作為字典理解,第二段代碼是people = {id: Person(*data) for id, data in persons_database.items()}
所以這里沒有什么是無法解釋的...... python中的List之前的*
將List作為列表的連續順序中的單獨項目解壓縮,因此對於長度為n的List l
, *l
將計算為l[0], l[1], ... , l[n-2], l[n-1]
當然,一個簡單的列表理解應該可以做到這一點:
people = [Person(*persons_database[pid]) for pid in persons_database]
這只是循環遍歷person數據庫中的每個鍵(id),並通過將該id的屬性列表直接作為args傳遞給Person()
構造函數來創建person實例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.