簡體   English   中英

動態創建類python的實例

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM