1.繼承介紹以及單繼承地沮。
將共性的內(nèi)容放在父類中炕柔,子類只需要關(guān)注自己特有的內(nèi)容python中所有的內(nèi)容都是對(duì)象振坚,所有的對(duì)象都直接或間接繼承了object。
2.繼承示例
# 定義一個(gè)父類蔬将,如下:
class Cat(object):
def __init__(self, name, color="白色"):
self.name = name
self.color = color
def run(self):
print("%s--在跑"%self.name)
# 定義一個(gè)子類爷速,繼承Cat類如下:
class Bosi(Cat):
def setNewName(self, newName):
self.name = newName
def eat(self):
print("%s--在吃"%self.name)
bs = Bosi("印度貓")
print('bs的名字為:%s'%bs.name)
print('bs的顏色為:%s'%bs.color)
bs.eat()
bs.setNewName('波斯')
bs.run()
運(yùn)行結(jié)果是:
說明:
雖然子類沒有定義__init__方法,但是父類有霞怀,所以在子類繼承父類的時(shí)候這個(gè)方法就被繼承了惫东,所以只要?jiǎng)?chuàng)建Bosi的對(duì)象,就默認(rèn)執(zhí)行了那個(gè)繼承過來的__init__方法
總結(jié)
子類在繼承的時(shí)候毙石,在定義類時(shí)廉沮,小括號(hào)()中為父類的名字
父類的屬性、方法徐矩,會(huì)被繼承給子類滞时。
私有的屬性,不能通過對(duì)象直接訪問滤灯,但是可以通過方法訪問
私有的方法坪稽,不能通過對(duì)象直接訪問
私有的屬性、方法力喷,不會(huì)被子類繼承刽漂,也不能被訪問
一般情況下演训,私有的屬性弟孟、方法都是不對(duì)外公布的,往往用來做內(nèi)部的事情样悟,起到安全的作用
3.多繼承
class Horse:
def __init__(self,strong):
self.strong=strong
def run(self):
print('跑得快')
class Donkey:
def __init__(self,ear):
self.ear=ear
def pull(self):
print('拉磨')
class Mule(Horse,Donkey):
pass
mule=Mule(True)
print(mule.strong)
mule.run()
mule.pull()
運(yùn)行結(jié)果是:
True
跑得快
拉磨
4.重寫父類方法
所謂重寫拂募,就是子類中庭猩,有一個(gè)和父類相同名字的方法,在子類中的方法會(huì)覆蓋掉父類中同名的方法陈症。
class Father:
def __init__(self,money):
self.money=money
def f1(self):
print('Father.....f1')
class Son(Father):
def __init__(self,name,age,money):
self.name=name
self.age=age
Father.__init__(self,money)
def f1(self):
print('Son......f1')
Father.f1(self)
def __str__(self):
return '%s,%s,%s'%(self.money,self.name,self.age)
son=Son('小王',23,4234234)
son.f1()
print(son)
運(yùn)行結(jié)果是:
Son......f1
Father.....f1
4234234,小王,23
5.多態(tài)
什么是封裝蔼水?
類是一種封裝,將屬性和方法封裝录肯。
函數(shù)也是一種封裝趴腋,將具有一定共的邏輯代碼封裝到一個(gè)函數(shù)中,使用的時(shí)候調(diào)用即可
提高代碼的擴(kuò)展性论咏。
什么是繼承优炬?
將公共的(共性的)屬性和方法放在父類中,子類只關(guān)注自己特有的屬性和方法厅贪。
提高代碼的擴(kuò)展性蠢护。
什么是多態(tài)?
一個(gè)對(duì)象在不同的情況下养涮,具有不同的形態(tài)葵硕,用于強(qiáng)類型語言。是使用在繼承和接口中實(shí)現(xiàn)贯吓。
Python中有兩種說法:
1懈凹、python支持多態(tài),python是一個(gè)弱類型宣决,本身一個(gè)變量名蘸劈,可以存儲(chǔ)任何類型的值,可以理解為多種形態(tài)
2尊沸、python不支持多態(tài)威沫,多態(tài)本身是用于強(qiáng)類型語言的,python是一個(gè)弱類型洼专,所以不支持多態(tài)
6.類屬性棒掠、實(shí)例屬性.
直接在類中定義的,與方法平齊屁商,不在方法里的屬性就是 類屬性
在方法里通過self.屬性 都是實(shí)例屬性
class Dog:
def __init__(self,name,color):
self.name=name
self.color=color
#創(chuàng)建一個(gè)實(shí)例對(duì)象
d1=Dog('旺財(cái)','黑色')
print(d1.name)
print(d1.color)
#實(shí)例屬性
d1.num=10
print(d1.num)
d2=Dog('小白','白色')
print(d2.name)
運(yùn)行結(jié)果是:
旺財(cái)
黑色
10
小白
class Person:
sun=1
p1=Person()
p2=Person()
print(p1.sun)
print(p2.sun)
print(Person.sun)
print('******************************************')
Person.sun=0
print(p1.sun)
print(p2.sun)
print('*************************************')
p1.sun=1111
print(p1.sun)
print(p2.sun)
print(Person.sun)
運(yùn)行結(jié)果是:
1
1
1
******************************************
0
0
*************************************
1111
0
0
7.