Python學習(十一) 自定義類

2021-06-16 18:24:06 字數 1609 閱讀 9348

已經兩天沒更新了,這兩天比較心煩氣燥,什麼都看不下去,學不下去,大概是「大姨父」來了

自定義類有兩種語法格式:

class classname:

suit

這種語法格式不指定基類,在python中,不指定基類的話,預設的基類就是object。所以在python中,所有的類都是object的子類。如果要指定基類就要用另一種語法格式:

class classname(base_classes):

suit

其中的base_classes就是新建立的類的基類。在suit中就可以定義新類的方法了,用def來建立,就像建立乙個全域性函式那樣。

在定義函式的過程中,可以使用乙個隱含的引數self用來指代自己,就像c++中的this,只是在使用self的時候必須顯式的使用,不能像this那樣省略掉。

在python中,建立物件分兩個步驟,首先是建立乙個原始物件,會呼叫__new__(),然後初始化物件,會呼叫__init()。在自定義類的時候,一般__new__()都不需要重新寫,而__init__()幾乎都要重寫。

像這種在函式名開始和結尾處都有兩個下劃線的方法是特殊方法,自己定義的一般方法不應該以這樣的方式命名,以防跟以後公升級版本的特殊方法衝突。在子類的方法中如果想要呼叫基類的方法,可以使用super()來指定基類,然後用點操作符來呼叫基類的方法。

特性

如果想要對自定義類中的屬性進行控制,可以使用特性來實現。

像圓類中的求面積函式,求周長函式等其實都可以看作是類的乙個成員變數來取用,只是唯讀的,這樣的成員函式完全可以用特性來描述。這樣在需要這個值的時候,直接用特性而不需要呼叫方法就可以了。特性和方法的最顯著的區別就是修飾器。修飾器是乙個函式,該函式以乙個函式或方法為引數,並返回引數修飾後的版本。修飾器是通過在名字前使用@符號來標記的。比如property修飾器函式,這個修飾器函式是乙個內建函式,至多可以接受4個引數:乙個獲取者函式,乙個設定者函式,乙個刪除者函式以及乙個docstring。使用@property的效果與僅使用乙個引數(獲取者函式)呼叫property的效果是一樣的,例如:

def area(self):

return math.pi*(self.redius**2)

area = property(area)

更常用的是以下這種方式:

@property

def area(sef):

return math.pi*(self.redius**2)

另外,很重要的乙個,就如一開始所說的,可以把屬性轉換成特性來對其進行控制,這樣,我們必須建立乙個私有的屬性,其中實際存放了資料,並提供獲取者方法與設定者方法。私有的屬性用前面以兩個下劃線開始,如:__radius等,然後定義其各種方法:

@property

def radius(self):

"""注釋注釋

注釋注釋

return self.__redius

@redius.setter

def radius(self, radius):

assert radius > 0, "radius must be......"

self.__radius = radius

這兩個方法是獲取者方法和設定者方法,其他的兩個發展由python來設定。

python自定義類

設計乙個person類的3種方式 1 使用內建型別list person mike 23,male 0 姓名,1 年紀,2 性別 print person 0 person 1 person 2 2 使用字典型別dic person1 person2 print person1 name perso...

Python自定義佇列類

佇列 queue 是先進先出 fifo,first in first out 的線性表。在具體應用中通常用鍊錶或者陣列來實現。佇列只允許在後端 稱為rear 進行插入操作,在前端 稱為front 進行刪除操作。佇列的操作方式和堆疊類似,唯一的區別在於佇列只允許新資料在後端進行新增。queue是pyt...

Python學習 異常處理,自定義異常類

usr bin python coding utf 8 filename usingexception.py 異常處理 寫乙個自己定義的異常類 class myinputexception exception def init self,length,least exception.init sel...