python基礎學習七 類

2021-08-09 13:43:05 字數 3148 閱讀 7924

python 物件導向相對別的語言來說缺少兩個功能:

1、python不具備過載,過載是指在同乙個類中,使得方法有相同的名稱,但是有不同的引數列表,但由於python函式具有強大的引數處理功能,因此這不是乙個問題。

2、python不存在強制資料隱私的機制,不過若想建立屬性(例項變數或方法)時在屬性名前以兩個下劃線引導,python就會阻止無心的訪問,因此可以認為是私有的。

如果乙個方法是預定義的特殊方法,則應該在方法名前後加上雙下劃線,例如__sub__()和__add__()。

1、方法一

class

classname:

suite

2、方法二

class

classname

(base_class):

suite

import math

class

point

(object):

def__init__

(self,x,y):

self.x = x

self.y = y

def__eq__

(self,other):

return self.x == other.x and self.x == other.y

defdistance_from_origin

(self):

return math.hypot(self.x,self.y)

def__str__

(self):

return

'(,)'.format(self)

a = point(1,2)

b = point(2,2)

b.distance_from_origin()

point.distance_from_origin(b)

a == b

str(a)

可預定義的比較方法如下:

預設情況下,自定義類的所有例項都是可雜湊運算的,因此,可對其呼叫hash(),也可以將其作為字典的鍵,或儲存在集合中。但是如果重新實現了__eq__(),例項就不再是可雜湊運算的了。

為了避免不適當的比較,可以使用如下三種方法:

assert isintance(object,class),'object

isnot

in the class'

if

not isinstance(object,class):

raise typeerror('object

isnot

in the class')

if

not isinstance(object,class):

return notimplement-ented

如果返回了notimplemented,python就會嘗試呼叫other.__eq__(self)來檢視object是否支援與class類的比較,如果也沒有類似的方法,python將放棄搜尋,並產生typeerror異常。

內建的isinstance()函式以乙個物件與乙個類為引數,如果該物件屬於該類(或類元組中的某個類),或屬於給定類的基類,就返回true

使用super()

使用super()函式可以使用基類的方法

def

__init__

(self,x,y,radius):

super().__init__(x,y)

self.radius = radius

在使用super()時,可以不用寫self引數。

使用特性進行屬性訪問控制

一些方法返回乙個單獨的值,從使用者的角度講,可以將方法可以當做資料屬性使用。以下是乙個例項

class

circle

(object):

def__init__

(self,radius):

self.radius = radius

defarea

(self):

return self.radius * 2

area = property(area)

c = circle(4)

c.area

或可寫為

class

circle

(object):

def__init__

(self,radius):

self.radius = radius

@property

defarea

(self):

return self.radius * 2

c = circle(4)

c.area

提供了一種驗證資料有效性的方法

class

circle

(object):

def__init__

(self,x,y,radius):

self.radius = radius

self.x = x

self.y = y

defarea

(self):

return self.radius * 2

area = property(area)

@property

defradius

(self):

return self.__radius

@radius.setter

defradius

(self,radius):

assert radius > 0,"radius must be nonzero and non-negative"

self.__radius = radius

c = circle(1,-2,4)

c.area

Python的基礎學習 七 類

3.繼承 4.匯入類 類是物件導向程式設計的一大特色。在物件導向程式設計中,你編寫表示現實世界中的事物和情景的類,並基於這些類來建立物件。基於類建立物件時,每個物件都自動具備這種通用行為,然後可根據需要賦予每個物件獨有的個性。根據類建立物件被稱為例項化。class dog def init self...

Python基礎(七) 類

物件導向程式設計是最有效的軟體編寫方法之一,在物件導向程式設計中的類可以模擬顯示世界中的事物和情景,並基於這些類來建立物件,在類中定義物件的通用行為。建立和使用類 建立 class dog 一次模擬小狗的簡單嘗試 def init self,name,age 初始化屬性name和age self.n...

類 Python學習筆記(七)

2 建立例項 二 繼承 class dog 一次模擬小狗的簡單嘗試 def init self,name,age 初始化屬性name和age self.name name self.age age defsit self 模擬小狗被命令式蹲下 print self.name.title 蹲下 def...