1.多型:通過繼承父類後,子類有了共有的父類的方法,當執行該方法時,可能效果不同,比如,水在不同溫度下有不同的形態:冰,水蒸氣,霧,他們在執行相同函式時候,效果不同
classh2o:
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類的時候,並不知道類裡面是怎麼執行的。所以是封裝。
說法二:單下劃線或雙下劃線的方法就是私有的,這是封裝。
classschool:
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了,還是可以呼叫
classh2o:
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...