1. 程式人生 > >Python中的封裝,繼承和多型

Python中的封裝,繼承和多型

面向物件的三大特性:封裝,繼承和多型

封裝:在類的內部定義屬性和方法,通過物件或類名來訪問屬性和方法,隱藏功能的實現細節,也可以設定訪問許可權。

廣義的封裝:例項化一個物件,給物件空間封裝一些屬性;狹義的封裝:私有制;私有成員:私有靜態欄位,私有方法,私有物件屬性

繼承:子類需要重用父類的屬性和方法,子類中也可以定義自己的屬性和方法。

多型: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()