python基礎 物件導向(八)多型,封裝

2022-07-11 01:36:12 字數 2092 閱讀 5962

1.多型:通過繼承父類後,子類有了共有的父類的方法,當執行該方法時,可能效果不同,比如,水在不同溫度下有不同的形態:冰,水蒸氣,霧,他們在執行相同函式時候,效果不同

class

h2o:

def__init__

(self, name, temperature):

self.name =name

self.temperature =temperature

defchang(self):

if self.temperature <0:

print('

%s的溫度太低了,結冰了

' %self.name)

elif self.temperature > 0 and self.temperature < 100:

print('

%s變成水了

' %self.name)

elif self.temperature > 100:

print('

%s變成水蒸氣了

' %self.name)

class

water(h2o):

pass

class

gas(h2o):

pass

class

ice(h2o):

pass

w1 = water('

水', -5)

w1.chang()

g1 = gas('

水蒸氣', 90)

g1.chang()

i1 = ice('

冰', 20)

2.封裝:

說法一:類就是封裝,外部import類的時候,並不知道類裡面是怎麼執行的。所以是封裝。

說法二:單下劃線或雙下劃線的方法就是私有的,這是封裝。

class

school:

def__init__

(self, name):

self.name =name

def_get_name(self):

print('

學校的名字是%s

' %self.name)

school = school('清華'

)school._get_name()

#單下劃線是可以呼叫的,只是大家約定是私有屬性

class

school:

def__init__

(self, name):

self.name =name

def__get_name

(self):

print('

學校的名字是%s

' %self.name)

school = school('清華'

)print(school.__dict__

)school._school__get_name()

#雙下劃線不能直接呼叫的,python把__get_name重新命名為_school__get_name了,還是可以呼叫

在繼承中,父類如果不想讓子類覆蓋自己的方法,可以將方法定義為私有的,雙下劃線。說法三:封裝是為了區分內外,內部屬性不給外部看,但是需要給外部留出呼叫的介面

class

h2o:

def__init__

(self, name, temperature):

self.name =name

self.

__temperature = temperature #

注意,沒事不要輕易用隱藏屬性,否則後期要開很多介面

defget_temperature(self):

return self.__temperature

w1 = h2o('

水', 10)

print(w1.get_temperature())

python 物件導向 多型(八)

案例 人有中國人,英國人,他們都要講話 父類class person metaclass abc.abcmeta abc.abstractmethod裝飾器後嚴格控制子類必須實現這個方法 指定是抽象方法 abc.abstractmethod def talk self pass 子類class ch...

Python物件導向 多型

什麼是多型?多型就是一種事物有多種形態,比如說動物,有 貓 狗 老鼠 獅子 大象等。多型的好處 比如我們在新建立類時我們可以繼承動物類,動物類中的方法可以重寫,也可以不重寫,當我們新增時,只是新增乙個animals類而不需要再去修改父類 裡的內容,只需要呼叫就可以了。多型的最基本的實現就是通過繼承來...

Python基礎 (八)物件導向2

多型特殊方法和運算過載符 特殊屬性 物件的淺拷貝和深拷貝 組合設計模式 class 子類類名 父類1 父類2,類體class person def init self,name,age self.name name self.age age def say age self print 年齡 cla...