Python中創(chuàng)建對(duì)象列表的實(shí)現(xiàn)示例
Python 中要?jiǎng)?chuàng)建對(duì)象列表:
- 聲明一個(gè)新變量并將其初始化為一個(gè)空列表。
- 使用 for 循環(huán)迭代范圍對(duì)象。
- 實(shí)例化一個(gè)類以在每次迭代時(shí)創(chuàng)建一個(gè)對(duì)象。
- 將每個(gè)對(duì)象附加到列表中。
class Employee(): ? ? def __init__(self, id): ? ? ? ? self.id = id list_of_objects = [] for i in range(5): ? ? list_of_objects.append(Employee(i)) print(list_of_objects) for obj in list_of_objects: ? ? print(obj.id) ?# ??? 0, 1, 2, 3, 4
我們使用 range() 類來(lái)獲取可以迭代的范圍對(duì)象。
range 類通常用于在 for 循環(huán)中循環(huán)特定次數(shù)。
print(list(range(5))) # ??? [0, 1, 2, 3, 4] print(list(range(1, 6))) # ??? [1, 2, 3, 4, 5]
如果我們需要從特定數(shù)字開(kāi)始,請(qǐng)將 2 個(gè)參數(shù)(開(kāi)始和停止)傳遞給 range() 類。
在每次迭代中,我們使用當(dāng)前數(shù)字創(chuàng)建 Employee 類的實(shí)例并將結(jié)果附加到列表中。
list.append() 方法將一個(gè)項(xiàng)目添加到列表的末尾。
可以使用單個(gè) id 參數(shù)實(shí)例化 Employee 類,但根據(jù)您的用例,您在創(chuàng)建對(duì)象時(shí)可能必須傳遞更多參數(shù)。
如果我們需要更改列表中對(duì)象的 print() 函數(shù)的輸出,請(qǐng)?jiān)陬愔卸x __repr__() 方法。
class Employee(): ? ? def __init__(self, id): ? ? ? ? self.id = id ? ? def __repr__(self): ? ? ? ? return str(self.id) list_of_objects = [] for i in range(5): ? ? list_of_objects.append(Employee(i)) # ??? [0, 1, 2, 3, 4] print(list_of_objects)
我們使用每個(gè)對(duì)象的 id 作為 print() 函數(shù)的輸出。
請(qǐng)注意 ,__repr__() 方法必須返回一個(gè)字符串。
如果我們的類沒(méi)有在其 __init__() 方法中定義所有必要的屬性,請(qǐng)使用 setattr() 函數(shù)為每個(gè)對(duì)象添加屬性。
class Employee(): ? ? def __init__(self, id): ? ? ? ? self.id = id ? ? def __repr__(self): ? ? ? ? return str(self.id) list_of_objects = [] for i in range(3): ? ? obj = Employee(i) ? ? setattr(obj, 'topic', 'Python') ? ? setattr(obj, 'salary', 100) ? ? list_of_objects.append(obj) # ??? [0, 1, 2] print(list_of_objects) for obj in list_of_objects: ? ? print(getattr(obj, 'topic')) ? ? print(getattr(obj, 'salary'))
setattr 函數(shù)向?qū)ο筇砑訉傩浴?/p>
該函數(shù)采用以下 3 個(gè)參數(shù):
- object 添加屬性的對(duì)象
- name 屬性的名稱
- value 屬性的值
名稱字符串可以是現(xiàn)有的或新的屬性。
getattr 函數(shù)返回對(duì)象提供的屬性的值。
該函數(shù)將對(duì)象、屬性名稱和對(duì)象上不存在該屬性時(shí)的默認(rèn)值作為參數(shù)。
或者,我們可以使用列表推導(dǎo)。
使用列表理解創(chuàng)建對(duì)象列表
Python 中要?jiǎng)?chuàng)建對(duì)象列表:
- 使用列表推導(dǎo)來(lái)迭代 range 對(duì)象。
- 在每次迭代中,實(shí)例化一個(gè)類以創(chuàng)建一個(gè)對(duì)象。
- 新列表將包含所有新創(chuàng)建的對(duì)象。
class Employee(): ? ? def __init__(self, id): ? ? ? ? self.id = id ? ? def __repr__(self): ? ? ? ? return str(self.id) list_of_objects = [ ? ? Employee(i) for i in range(1, 6) ] print(list_of_objects) ?# ??? [1, 2, 3, 4, 5] for obj in list_of_objects: ? ? print(obj.id) ?# 1, 2, 3, 4, 5
我們使用列表推導(dǎo)來(lái)迭代長(zhǎng)度為 5 的范圍對(duì)象。
列表推導(dǎo)用于對(duì)每個(gè)元素執(zhí)行某些操作或選擇滿足條件的元素子集。
在每次迭代中,我們實(shí)例化 Employee 類以創(chuàng)建一個(gè)對(duì)象并返回結(jié)果。
新列表包含所有新創(chuàng)建的對(duì)象。
選擇哪種方法是個(gè)人喜好的問(wèn)題。
列表推導(dǎo)非常直接且易于閱讀,但如果您需要向每個(gè)對(duì)象添加額外的屬性或者創(chuàng)建過(guò)程更加復(fù)雜,則必須使用 for 循環(huán)。
在 Python 中將項(xiàng)目附加到類中的列表
將項(xiàng)目附加到類中的列表:
在類的 __init__() 方法中初始化列表。
定義一個(gè)方法,它接受一個(gè)或多個(gè)項(xiàng)目并將它們附加到列表中。
class Employee(): ? ? def __init__(self, name, salary): ? ? ? ? self.name = name ? ? ? ? self.salary = salary ? ? ? ? self.tasks = [] ?# ??? initialize list ? ? def add_task(self, task): ? ? ? ? self.tasks.append(task) ? ? ? ? return self.tasks bob = Employee('Jiyik', 100) bob.add_task('develop') bob.add_task('ship') print(bob.tasks) ?# ??? ['develop', 'ship']
我們?cè)陬惖?__init__() 方法中將任務(wù)列表初始化為實(shí)例變量。
實(shí)例變量對(duì)于我們通過(guò)實(shí)例化類創(chuàng)建的每個(gè)實(shí)例都是唯一的。
class Employee(): ? ? def __init__(self, name, salary): ? ? ? ? self.name = name ? ? ? ? self.salary = salary ? ? ? ? self.tasks = [] ?# ??? initialize list ? ? def add_task(self, task): ? ? ? ? self.tasks.append(task) ? ? ? ? return self.tasks alice = Employee('Fql', 1000) alice.add_task('design') alice.add_task('test') print(alice.tasks) ?# ??? ['design', 'test'] bob = Employee('Jiyik', 100) bob.add_task('develop') bob.add_task('ship') print(bob.tasks) ?# ??? ['develop', 'ship']
這兩個(gè)實(shí)例有單獨(dú)的任務(wù)列表。
我們還可以使用類變量而不是實(shí)例變量。
類變量由類的所有實(shí)例共享。
class Employee(): ? ? # ??? class variable ? ? tasks = [] ? ? def __init__(self, name, salary): ? ? ? ? self.name = name ? ? ? ? self.salary = salary ? ? @classmethod ? ? def add_task(cls, task): ? ? ? ? cls.tasks.append(task) ? ? ? ? return cls.tasks Employee.add_task('develop') Employee.add_task('ship') print(Employee.tasks) ?# ??? ['develop', 'ship'] alice = Employee('Fql', 1000) print(alice.tasks) ?# ??? ['develop', 'ship'] bob = Employee('Jiyik', 100) print(bob.tasks) ?# ??? ['develop', 'ship']
tasks 變量是一個(gè)類變量,所以它被所有實(shí)例共享。
我們將 add_task() 方法標(biāo)記為類方法。 傳遞的第一個(gè)參數(shù)類方法是類。
list.append() 方法將一個(gè)項(xiàng)目添加到列表的末尾。
但是,我們可能經(jīng)常需要做的事情是將多個(gè)項(xiàng)目附加到列表中。
我們可以使用 list.extend() 方法將可迭代對(duì)象的項(xiàng)目附加到列表中。
class Employee(): ? ? def __init__(self, name, salary): ? ? ? ? # ??? 實(shí)例變量(每個(gè)實(shí)例都是唯一的) ? ? ? ? self.name = name ? ? ? ? self.salary = salary ? ? ? ? self.tasks = [] ?# ??? 初始化列表 ? ? def add_tasks(self, iterable_of_tasks): ? ? ? ? self.tasks.extend(iterable_of_tasks) ? ? ? ? return self.tasks bob = Employee('Jiyik', 100) bob.add_tasks(['develop', 'test', 'ship']) print(bob.tasks) ?# ??? ['develop', 'test', 'ship']
我們使用 list.extend() 方法將多個(gè)值附加到任務(wù)列表。
list.extend 方法采用可迭代對(duì)象(例如列表或元組)并通過(guò)附加可迭代對(duì)象中的所有項(xiàng)目來(lái)擴(kuò)展列表。
到此這篇關(guān)于Python中創(chuàng)建對(duì)象列表的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)Python 創(chuàng)建對(duì)象列表內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python3.x+pyqt5實(shí)現(xiàn)主窗口狀態(tài)欄里(嵌入)顯示進(jìn)度條功能
這篇文章主要介紹了python3.x+pyqt5實(shí)現(xiàn)主窗口狀態(tài)欄里(嵌入)顯示進(jìn)度條功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-07-07python?windows安裝cuda+cudnn+pytorch教程
這篇文章主要介紹了python?windows安裝cuda+cudnn+pytorch教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-05-05在Heroku云平臺(tái)上部署Python的Django框架的教程
這篇文章主要介紹了在Heroku云平臺(tái)上部署Python的Django框架的教程,Heroku云平臺(tái)使用了Git版本控制系統(tǒng),所以本教程主要提供了配置所需要的Git腳本,需要的朋友可以參考下2015-04-04Python實(shí)現(xiàn)字符串匹配的KMP算法
KMP算法的關(guān)鍵是利用匹配失敗后的信息,盡量減少模式串與主串的匹配次數(shù)以達(dá)到快速匹配的目的。這篇文章主要介紹了Python實(shí)現(xiàn)字符串匹配的KMP算法,需要的朋友可以參考下2019-04-04python中dict()的高級(jí)用法實(shí)現(xiàn)
這篇文章主要介紹了python中dict()的高級(jí)用法實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11利用Python實(shí)現(xiàn)自制文件搜索小工具
當(dāng)自己電腦文件很多還有點(diǎn)亂,不記得自己文件放哪里的時(shí)候,用電腦自帶的搜索文件,這個(gè)等待時(shí)間可慢了。所以我們不如自己用python做一個(gè)搜索工具!犄角旮旯的文件都能一秒鐘搜索出來(lái)的那種2022-09-09