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