Python中的封裝,繼承和多型
阿新 • • 發佈:2018-11-04
面向物件的三大特性:封裝,繼承和多型
封裝:在類的內部定義屬性和方法,通過物件或類名來訪問屬性和方法,隱藏功能的實現細節,也可以設定訪問許可權。
廣義的封裝:例項化一個物件,給物件空間封裝一些屬性;狹義的封裝:私有制;私有成員:私有靜態欄位,私有方法,私有物件屬性
繼承:子類需要重用父類的屬性和方法,子類中也可以定義自己的屬性和方法。
多型:python是弱型別語言,python中處處是多型;python中沒有多型,但是有鴨子型別 ==》一些類含有相同的方法,則這些類就互稱為鴨子
下面這幾個類都有index方法,index具有相同的作用,則這幾個類就互稱為鴨子
class Str: def index(self): pass class List: def index(self): pass class Tuple: def index(self): pass
對於私有成員,類的外部不能訪問,子類(派生類)也不可以訪問,只能在本類的內部訪問
class Animal: head = "True" #靜態變數(靜態欄位) body = "True" #靜態變數(靜態欄位) __color = "red" #私有靜態變數(私有靜態欄位) __skin = "black" #私有靜態變數(私有靜態欄位) def __init__(self,name,age): #特殊方法 self.name = name #物件屬性(普通欄位) self.age =age #物件屬性(普通欄位) def eat(self):#普通方法 print("所有動物都需要吃……") def drink(self):#普通方法 print("所有動物都需要喝……") def __func(self):#私有方法 print("Animal fun") def fun(self): self.__func() #私有方法在類的內部可以訪問 class Dog(Animal): pass a1 = Animal("小貓",2) ##print(a1.head,a1.body) ##a1.eat() ##print(a1.__color) #報錯 物件不可以訪問類的私有靜態變數 ##a1.__func() #報錯 物件不可以訪問類中私有方法 ##print(Animal.head) ##print(Animal.__color) #報錯 類名不可以訪問類中的私有靜態變數 ##Animal.__func() #報錯 類名不可以直接訪問類中的私有方法 d = Dog("小狗","2") #print(d.head) #print(d.__color) #報錯 子類不可以訪問父類的私有靜態變數 #d.__func() #報錯 子類不可以訪問父類的私有方法 d.fun()