前言
在前面,我用了3篇文章解釋python的面向?qū)ο螅?/p> 面向?qū)ο螅簭拇a復(fù)用開(kāi)始 面向?qū)ο螅涸O(shè)置對(duì)象屬性 類和對(duì)象的名稱空間
本篇是第4篇,用一個(gè)完整的示例來(lái)解釋面向?qū)ο蟮囊恍┘?xì)節(jié)。
例子的模型是父類Employe和子類Manager,從類的定義開(kāi)始,一步步完善直到類變得完整。
定義Person類
現(xiàn)在,假設(shè)Employe類有3個(gè)屬性:名字name、職稱job和月薪水pay。
定義這個(gè)類:
class Employe(): def __init__(self, name, job=None, pay=0): self.name = name self.job = job self.pay = pay
這里為_(kāi)_init__()的job參數(shù)提供了默認(rèn)值:None,表示這個(gè)員工目前沒(méi)有職稱。對(duì)于沒(méi)有職稱的人,pay當(dāng)然也應(yīng)該是0。這樣創(chuàng)建Employe對(duì)象的時(shí)候,可以只給參數(shù)name。
例如:
if __name__ == "__main__": longshuai = Employe("Ma Longshuai") xiaofang = Employe("Gao Xiaofang", job="accountant", pay=15000)上面的if判斷表示這個(gè)py文件如果當(dāng)作可執(zhí)行程序而不是模塊,則執(zhí)行if內(nèi)的語(yǔ)句,如果是以模塊的方式導(dǎo)入這個(gè)文件,則if內(nèi)的語(yǔ)句不執(zhí)行。這種用法在測(cè)試模塊代碼的時(shí)候非常方便。
運(yùn)行該py文件,得到結(jié)果:
<__main__.Employe object at 0x01321690>
<__main__.Employe object at 0x01321610>
添加方法
每個(gè)Employe對(duì)象的name屬性由姓、名組成,中間空格分隔,現(xiàn)在想取出每個(gè)對(duì)象的名。對(duì)于普通的姓 名字符串,可以使用字符串工具的split()函數(shù)來(lái)處理。
例如:
>>> name = "Ma Longshuai">>> name.split()[-1]'Longshuai'
于是可以在longshuai和xiaofang這兩個(gè)Employe對(duì)象上:
print(longshuai.name.split()[-1])print(xiaofang.name.split()[-1])
結(jié)果:
Longshuai
Xiaofang
與之類似的,如果想要為員工按10%加薪水,可以在每個(gè)Employe對(duì)象上:
xiaofang.pay *= 1.1print(xiaofang.pay)
無(wú)論是截取name的名部分,還是加薪水的操作,都是Employe共用的,每個(gè)員工都可以這樣來(lái)操作。所以,更合理的方式是將它們定義為類的方法,以便后續(xù)的代碼復(fù)用:
class Employe(): def __init__(self, name, job=None, pay=0): self.name = name self.job = job self.pay = pay def lastName(self): return self.name.split()[-1] def giveRaise(self, percent): self.pay = int(self.pay * (1 + percent))if __name__ == "__main__": longshuai = Employe("Ma Longshuai") xiaofang = Employe("Gao Xiaofang", job="accountant", pay=15000) print(longshuai.lastName()) print(xiaofang.lastName()) xiaofang.giveRaise(0.10) print(xiaofang.pay)上面的giveRaise()方法中使用了int()進(jìn)行類型轉(zhuǎn)換,因?yàn)檎麛?shù)乘以一個(gè)小數(shù),返回結(jié)果會(huì)是一個(gè)小數(shù)(例如15000 * 0.1 = 1500.0)。這里我們不想要這個(gè)小數(shù),所以使用int()轉(zhuǎn)換成整數(shù)。
新聞熱點(diǎn)
疑難解答
圖片精選