Python之面向對象:多態、封裝——第十六天

1、對多態的理解:多態和繼承不分家,多態實際上是依附於繼承的兩種含義的,“改變”和”擴展“,多態就是繼承的兩層含義的一個具體實現機制。即:調用不同的類實例化對象下的相同方法,實現的過程不一樣。
多態的具實例:以水的三種形態爲例

class H2O:
	def __init__(self,name,temperature):
		self.name=name
		self.temperature=temperature
	def turn_ice(self):
		if self.temperature<0:
			print("%s溫度太低結冰了"%self.name)
		elif self.temperature>0 and self.temperature<100 :
			print("%s液化成水"%self.name)
		elif self.temperature<0:
			print("%s溫度太高變成了水蒸氣"%self.name)

class Water(H2O)pass
class Ice(H2O):
	pass
class Stream(H2O):
	pass

a=Water("水",28)
b=Ice("冰",-20)
c=Steam("蒸汽",2000)
		

2、封裝:封裝的意義在於隱藏,”封”指的封閉,“裝”指的是把東西裝進去,類的屬性就好比東西,類就相當於封裝東西的容器。

3、封裝的三種層面:
(1)第一個層面:類就是一個麻袋,本身就是封裝
(2)第二個層面:類中定義私有屬性,只在內部使用,外部無法訪問,這裏要說到python中的兩個約定(僅僅是約定而已,不做強行限制)

  • 類中屬性以單下劃線"_"開頭的,就是被隱藏起來的,但是外部還是可以調用的,python中的約定沒有那麼嚴格
  • 類中屬性以兩個單下劃線“__”開頭的,外部調用會將其屬性名改變。如__test=“123”,外部調用需要更名纔可以訪問到,名稱格式爲"_類名__test",可以用print(類名.dict)打印出來查看
    (3)第三個層面(真正意義上的封裝):只能內部訪問,外部不能訪問。可以寫一個內部方法(接口函數),然後通過外部調用該方法執行
class test:

    _a="hahaha"

    def __init__(self,name,age):
        self.name=name
        self.age=age

  #接口函數
    def get_a(self):
        print(_a)
        
        
p=test("Mary",18)
p.get_a()

#輸出結果:hahaha
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章