這一節我們來繼續介紹物件導向程式設計。涉及到的內容有property屬性和運算子的過載。
1.property屬性
之前的物件導向程式設計中,我們介紹了兩種訪問屬性的方式。第一種是物件名.屬性名,這種直接訪問屬性的方式;第二種是使用get和set方法訪問屬性。第二種方式**的靈活性比第一種要高,並且第二種方式可以訪問私有屬性,保證了資料的安全性。但是第一種方式**的可讀性要高,尤其是大工程中,需要閱讀和編寫大量的**,第一種方式在**效率方面有明顯的優勢。那有沒有可能一種方式使**的靈活性,安全性,可讀性同時具備呢?python中的property屬性就提供了這種可能。
使用property屬性,在訪問私有屬性時仍然可以使用第一種直接訪問的方式,但訪問屬性時呼叫的是具體的方法,而並不是像訪問非私有屬性那樣簡單的讀值和寫值。下面我們來通過乙個例子來介紹property屬性的使用方式。**例子如下:
[python]view plaincopy
class person():
def __init__(self,age):
self.__age=age
@property
def age(self):#讀取屬性__age的值,相當於方法getage()
return
self.__age
@age.setter#設定屬性__age的值,相當於方法setage()
def age(self,age):
if(age<0):
age=0
self.__age=age
per=person(10)
per.age=-100
#修改屬性__age,呼叫方法age(age)
print(per.age)#讀取屬性__age,呼叫方法age()
如上為乙個利用property屬性直接訪問私有屬性的例子。主要分為以下幾個步驟,如下:
①定義乙個讀取私有屬性值的方法s,功能與get方法相同,並使用property修飾方法s。
如上**,定義了乙個讀取私有屬性__age值的方法age(),並使用@property來修飾方法age()。
②定義乙個用於設定私有屬性值方法s',,功能與set方法相同,並使用@s.setter來修飾這個方法s'。
如上**,定義了乙個修改私有屬性__age值的方法age(age),並使用@age.setter來修飾方法age(age)。
③讀取私有屬性__age時,採用直接訪問的方式:物件名.s,這時會呼叫方法s;
修改私有屬性__age時,採用直接訪問的方式:物件名.s'=新屬性值,這時會呼叫方法s'。
如上**,person.age=-100修改__age屬性值,這時會呼叫方法age(age);person物件讀取__age值:person.age,會呼叫方法age()。注意,s和s'的方法名一般與屬性名相同,這樣訪問私有屬性時,就可以按照物件名.屬性名這種直接訪問的方式訪問屬性。方法s和s'都是訪問私有屬性的實現,相當於get和set方法,使用property屬性可以讓我們像直接訪問屬性那樣訪問方法。**列印結果如下:
2.運算子過載
在python中有時類的物件之間可能需要進行運算操作,但實際上物件間的運算是其屬性間的運算。實現類的物件間的運算,需要過載類中的方法。例如兩個物件進行加操作,需要過載方法__add__(self,other),形參self和other分別代表兩個物件。如下:
[python]view plaincopy
class person():
def __init__(self,age):
self.__age=age
def __add__(self, other):#過載方法__add__()
return
self.__age+other.__age
per1=person(10)
per2=person(12)
print(per1+per2)#兩個物件進行加操作,會呼叫過載後的方法__add__()
print(per1.__add__(per2))#直接呼叫方法__add__(),與兩個物件的加運算操作是相同的
如上,在person類中過載了兩個物件進行加操作的方法__add__(),實現的具體操作為將兩個物件的年齡相加。物件per1和per2進行加操作:per1+per2,會呼叫呼叫person類中過載後的方法__add__(),per1.__add__(per2)這種直接呼叫__add__()實現兩個物件相加的方式,與直接使用運算子實現物件相加的結果是一致的。但使用運算子+的**顯然更加簡潔明瞭。**列印結果如下:
更多有關運算子過載的方法,如下表:
至此,有關物件導向程式設計的內容基本介紹完了,下一節我們將介紹tinkinter圖形介面程式設計,敬請期待。
Python學習 27 物件導向程式設計4
這一節我們來繼續介紹物件導向程式設計。涉及到的內容有property屬性和運算子的過載。1.property屬性 之前的物件導向程式設計中,我們介紹了兩種訪問屬性的方式。第一種是物件名.屬性名,這種直接訪問屬性的方式 第二種是使用get和set方法訪問屬性。第二種方式 的靈活性比第一種要高,並且第二...
Python學習筆記 6 高階函式 物件導向程式設計
什麼是高階函式?高階函式英文叫higher order function。什麼是高階函式?我們從實際 一步一步深入概念。以內建函式max 為例吧 max 1,5,4 5 max in function max x max 1,5,4 x 5可見,max 1,5,4 是函式呼叫,而max是函式本身,要...
27 物件導向程式設計
物件導向程式設計 物件導向程式設計 object oriented programming,簡稱oop,是一種程式設計方法。物件導向面向過程區別 完成自我介紹功能,面向過程完成功能 stu a stu b stu c def stu info stu 自我介紹 for key,value in st...