面向對象的三大特性:封裝,繼承和多態
封裝:在類的內部定義屬性和方法,通過對象或類名來訪問屬性和方法,隱藏功能的實現細節,也可以設置訪問權限。
廣義的封裝:實例化一個對象,給對象空間封裝一些屬性;狹義的封裝:私有制;私有成員:私有靜態字段,私有方法,私有對象屬性
繼承:子類需要重用父類的屬性和方法,子類中也可以定義自己的屬性和方法。
多態: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()