Python學習 27 物件導向程式設計4

2021-08-16 10:04:44 字數 2544 閱讀 1603

這一節我們來繼續介紹物件導向程式設計。涉及到的內容有property屬性和運算子的過載。

1.property屬性

之前的物件導向程式設計中,我們介紹了兩種訪問屬性的方式。第一種是物件名.屬性名,這種直接訪問屬性的方式;第二種是使用get和set方法訪問屬性。第二種方式**的靈活性比第一種要高,並且第二種方式可以訪問私有屬性,保證了資料的安全性。但是第一種方式**的可讀性要高,尤其是大工程中,需要閱讀和編寫大量的**,第一種方式在**效率方面有明顯的優勢。那有沒有可能一種方式使**的靈活性,安全性,可讀性同時具備呢?python中的property屬性就提供了這種可能。

使用property屬性,在訪問私有屬性時仍然可以使用第一種直接訪問的方式,但訪問屬性時呼叫的是具體的方法,而並不是像訪問非私有屬性那樣簡單的讀值和寫值。下面我們來通過乙個例子來介紹property屬性的使用方式。**例子如下:

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分別代表兩個物件。如下:

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...