python中也有三大特性徒役,封裝孽尽、繼承和多態(tài)。
封裝
封裝忧勿,就是只能在類的內(nèi)部訪問杉女,外部訪問屬性或方法會報(bào)異常,python中的封裝很簡單鸳吸,只要在屬性前或者方法名前加上兩個下劃線就可以熏挎,如self.__name,def __eat(self)這樣就完成了屬性和方法的私有化晌砾,也就是封裝坎拐。
在python中封裝并不是很安全,有一個方法可以從外部訪問到私有屬性和方法贡羔,使用_類名__私有屬性或方法廉白,如有一個Card類,下面有一個私有屬性密碼__pwd乖寒,print(_Card__pwd)這樣就可以獲取到卡類下面的私有屬性密碼的值了猴蹂。要做一些安全的項(xiàng)目,不建議使用python楣嘁。
繼承
python中繼承也非常簡單磅轻,定義一個Animal類珍逸,下面有一個eat()方法,再定義一個Dog類聋溜,Dog類中什么都不寫谆膳,用pass代替。然后實(shí)例化一個dog撮躁,讓dog繼承Animal類,dog可以使用eat()方法漱病。
class Animal(obiect):
? ? def __init__(self,name)
? ? ? ? self.name = name
? ? def eat(self):
? ? ? ? print(self.name,"吃飯")
class Dog(Animal):
? ? pass
dog=Dog("旺財(cái)")
dog.eat()
如果子類中的方法與父類中的方法重名,優(yōu)先調(diào)用子類中的方法把曼,如果父類中有color屬性杨帽,子類中有name和age屬性,子類又想使用父類中的color屬性嗤军,那么可以使用super這個關(guān)鍵字
class Animal(object):
? ? def __init__(self,color):
? ? ? ? ?self.color=color
? ? def eat(self):
? ? ? ? print("吃飯")
class Dog(Animal):
? ? def __init__(self,name,age,color):
? ? ? ? super(Dog,self).__init__(color)#調(diào)用父類的初始化方法
? ? ? ? self.name=name
? ? ? ? self.age=age
dog = Dog("小黑",2,"白色")
print(dog.name,dog.age,dog.color)
多態(tài)
python中本質(zhì)上是沒有真正多態(tài)這種思路注盈,只是形式上有這樣一個多態(tài)的思路,下面看下例子
class Animal(object):
? ? def __init__(self,color):
? ? ? ? self.color=color
? ? def eat(self):
? ? ? ? print("吃飯")
class Cat(Animal):
? ? def eat(self):
? ? ? ? print("貓吃魚")
class Dog(Animal):
? ? def __init__(self,name,age,color):
? ? ? ? super(Dog,self).__init__(color)
? ? ? ? self.name=name
? ? ? ? self.age=age
? ? def eat(self):
? ? ? ? print("狗吃肉")
def feed(obj):
? ? obj.eat()
an=Animal("白色")#實(shí)例化Animal
cat=Cat("棕色")#實(shí)例化Cat
dog=Dog("小黃",2,"黃色")#實(shí)例化Dog
feed(dog)
定義了一個Animal父類叙赚,兩個子類Cat和Dog里面都有eat()方法老客,最后再定義一個feed()喂養(yǎng)方法,傳入一個obj對象震叮,調(diào)用obj.eat()胧砰,然后實(shí)例化Animal,Cat和Dog冤荆,分別在feed中傳入實(shí)例化對象an朴则,cat和dog會分別打印出不同的語句,這個就是python中的多態(tài)钓简。