p怎么调用python的实例属性_Python中类的声明,使用,属性,实例属性,计算属性及继承,重写...
Python中的類的定義以及使用:
類的定義:
定義類 在Python中,類的定義使用class關(guān)鍵字來實(shí)現(xiàn) 語法如下:classclassName:"類的注釋"類的實(shí)體 (當(dāng)沒有實(shí)體時(shí) 使用pass代替)
下面定義一個(gè)鳥類;
classflyBord:"""鳥類"""
pass #這里我們并沒有實(shí)體所以我們使用pass代替
這就是一個(gè)類的最基本的定義
類中的__init__函數(shù):類似于java中的構(gòu)造函數(shù),以及類的使用
實(shí)例如下:
#eg:定義一個(gè)狗類
classDog:def __init__(self): #方法名為 __init__ 形參必須要帶一個(gè)self 當(dāng)然也可以別名 self習(xí)慣使然
print("我是一只小狗")#創(chuàng)建一個(gè)實(shí)例
dog_1 = Dog() #創(chuàng)建類的實(shí)例,也就是調(diào)用這個(gè)類
注意這里的方法__intit__(self)下劃線是前面兩個(gè)下劃線,后面兩個(gè)下劃線,并不是一個(gè)下劃線。
輸出結(jié)果如下:
我是一只小狗
當(dāng)一個(gè)類的實(shí)例被創(chuàng)建出來的時(shí)候__init__(self)方法就會(huì)被自動(dòng)調(diào)用,類似于java,C#中的構(gòu)造函數(shù)。
類中的類屬性與實(shí)例屬性:
實(shí)例如下:
#eg:定義一個(gè)貓類
classcat:
"""貓類"""
name= "小花" #類屬性 可以通過類來調(diào)用
#__init__為實(shí)例方法
def __init__(self): #self為實(shí)例參數(shù)
self.name_1= "小強(qiáng)" #實(shí)例屬性 定義時(shí)必須要用實(shí)例參數(shù).出來
那么接下來我們分別調(diào)用它的類屬性,實(shí)例屬性
#cat_1為實(shí)例名稱
cat_1 =cat()
print(cat.name) #調(diào)用它的類屬性
print(cat_1.name) #通過實(shí)例參數(shù)調(diào)用類屬性
print(cat_1.name_1) #調(diào)用實(shí)例屬性
接下來我們看一下輸出結(jié)果:
小花
小花
小強(qiáng)
可以根據(jù)調(diào)用時(shí)使用的屬性以及輸出結(jié)果看到:
通過類名只可以調(diào)用類屬性
通過實(shí)例名稱可以調(diào)用類屬性也可以調(diào)用實(shí)例屬性
計(jì)算屬性
在Python中,可以通過@property(裝飾器)將一個(gè)方法轉(zhuǎn)換為屬性,從而實(shí)現(xiàn)用于計(jì)算的屬性。
將方法轉(zhuǎn)換為屬性后,可以直接通過方法名來訪問方法,而不需要再添加一對(duì)小括號(hào)"()",這樣可以讓代碼更加簡(jiǎn)潔
#通過@property創(chuàng)建用于計(jì)算的屬性的語法格式如下:#eg:
"""@property @property 裝飾器
def methodname(self): methodname:用于指定方法名,一般使用小寫字母開頭。該名稱最后將作為創(chuàng)建的屬性。 self:必要參數(shù)
block block:方法體,實(shí)現(xiàn)具體的功能,可以通過pass代替"""
下面定義一個(gè)類來具體實(shí)現(xiàn)矩形面積的求法:
#eg:
classRect:def __init__(self,height,width):
self.height=height
self.width=width
@propertydefarae(self):return self.height*self.width
創(chuàng)建這個(gè)類的實(shí)例并且調(diào)用已經(jīng)被寫成計(jì)算屬性的方法arae:
temp = Rect(800,600)print(temp.arae)
輸出結(jié)果如下:
480000
可以看到我們?cè)谕ㄟ^temp實(shí)例調(diào)用方法arae()時(shí)并沒有帶小括號(hào)(),因?yàn)閍rae()方法已經(jīng)被我們寫成了計(jì)算屬性
繼承的定義:
在編寫類的時(shí)候,并不是每一次都要從空白開始編寫,當(dāng)要編寫的類和另外一個(gè)已經(jīng)存在的類存在一定的繼承關(guān)系時(shí),就可以通過繼承來達(dá)到代碼的重用的目的,提高開發(fā)效率。就如同在自然現(xiàn)象中的我們每個(gè)人都從父輩祖輩哪里繼承了很多的特征,但又不完全是他們,我們又有自己的一些特征,在編程中被繼承的類叫做父類或基類,新的類叫做基類或者派生類。
繼承的語法:
"""class ClassName(baseclasslist): #ClassName派生類的類名 baseclasslist:被繼承的父類;被繼承的父類可以有多個(gè)
‘‘‘類的幫助文檔‘‘‘ 幫助文檔 可以在創(chuàng)建對(duì)象的時(shí)候輸入類名和‘(‘時(shí)可以查看
statement 類體 可以使用pass替代
"""
下面定義兩個(gè)父類在(父類中創(chuàng)建一個(gè)實(shí)例函數(shù))和一個(gè)子類 子類繼承父類:
classfather:def __init__(self):print("我是父親")classmather:def __init__(self):print("我是母親")classson(father,mather):pass
創(chuàng)建子類son的實(shí)例,并查看輸出結(jié)果。
son =son()#輸出結(jié)果:
我是父親
可以看到子類是沒有實(shí)例函數(shù)__init__()的,
但是創(chuàng)建實(shí)例的時(shí)候依然有輸出結(jié)果,并且是調(diào)用了父類father的實(shí)例函數(shù),
但是并沒有調(diào)用父類mather類的實(shí)例函數(shù),可見當(dāng)子類繼承了父類之后,
子類也會(huì)繼承父類的函數(shù),包括實(shí)例函數(shù),但是只會(huì)繼承第一個(gè)父類的函數(shù)
方法的重寫:
當(dāng)子類繼承了父類的函數(shù)之后,函數(shù)是子類需要的,但是函數(shù)體又不是子類需要的。
這時(shí)子類就要對(duì)父類的方法進(jìn)行重寫
下面直接進(jìn)行實(shí)例代碼:
#eg:
classFruit:"""水果類"""color= "綠色"
defharvest(self,color):print("水果是"+color+"的!")print("水果已經(jīng)收獲.....")print("水果原來是"+self.color+"的!")classOrange(Fruit):"""橘子類繼承自水果類"""color= "橙色"
def __init__(self):print("\n我是橙子")defharvest(self,color): #重寫父類函數(shù)harvestprint("橘子是"+color+"的!")print("橙子已經(jīng)收獲......")print("橙子原來是"+self.color+"的!")#創(chuàng)建Orange的對(duì)象
oran=Orange()
oran.harvest("黃色")
輸出結(jié)果如下:
我是橙子 #子類Orange的構(gòu)造函數(shù)
橘子是黃色的!
橙子已經(jīng)收獲......
橙子原來是橙色的!#這三句是子類繼承自父類Fruit的函數(shù),但是函數(shù)體與父類的函數(shù)體不同也就是我們說的重寫
可以看到我們調(diào)用了繼承自Fruit的方法harvest但是輸出內(nèi)容與父類的方法體不同,是因?yàn)槲覀冊(cè)谧宇怬range中將harvest函數(shù)的函數(shù)體重寫了
下面直接來一個(gè)小練習(xí),廢話不多說直接上代碼:
"""練習(xí) 設(shè)計(jì)藥品類medicine"""
from datetime importdatetimeclassMedicine:
name= ‘‘price=0
PD= ‘‘Exp= ‘‘
def __init__(self,name,price,PD,Exp):
self.name= name #藥名
self.price = price #價(jià)格
self.PD = PD #生產(chǎn)日期
self.Exp = Exp #失效日期
defget_name(self):returnself.namedefget_GP(self):
start= datetime.strptime(self.PD, ‘%Y-%m-%d‘)
end= datetime.strptime(self.Exp,‘%Y-%m-%d‘)return (end -start).days
med= Medicine(name=‘格列寧‘,price=25000,PD=‘2018-9-8‘,Exp=‘2020-9-8‘)
name=med.get_name()
GP=med.get_GP()print(name)print(GP)
輸出結(jié)果:
格列寧731
下一章咱們講講字符串的一些使用與注意事項(xiàng)
本博客皆是本人在自學(xué)Python期間的學(xué)習(xí)筆記,與一些學(xué)習(xí)心得,希望大家喜歡,每周一凌晨更新關(guān)于Python的知識(shí)。
新人創(chuàng)作打卡挑戰(zhàn)賽發(fā)博客就能抽獎(jiǎng)!定制產(chǎn)品紅包拿不停!總結(jié)
以上是生活随笔為你收集整理的p怎么调用python的实例属性_Python中类的声明,使用,属性,实例属性,计算属性及继承,重写...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: NSDictionary和NSMutab
- 下一篇: 按照月的第几周统计_Excel财务案例分