Python中面向对象的讲解(2)
生活随笔
收集整理的這篇文章主要介紹了
Python中面向对象的讲解(2)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1.繼承
在程序中,繼承描述的是多個(gè)類之間的所屬關(guān)系。
如果一個(gè)類A里面的屬性和方法可以復(fù)用,則可以通過繼承的方式,傳遞到類B里。
那么類A就是基類,也叫做父類;類B就是派生類,也叫做子類。
案例:
# 父類 class A(object):def __init__(self):self.num=50def print_num(self):print(self.num+100) # 子類 class B(A):pass b=B() print(b.num) b.print_num()
2.單繼承
子類只繼承一個(gè)父類
案例:
# 父類 class A(object):def __init__(self):self.car='20款奔馳'def print_car(self):print('老款%s'%self.car) # 子類 class B(A):passa=A() print(a.car) a.print_car()b=B() print(b.car) b.print_car()子類在繼承的時(shí)候,在定義類時(shí),小括號(hào)()中為父類的名字
父類的屬性、方法,會(huì)被繼承給子類
3.多繼承
子類繼承多個(gè)父類
案例1:
# 父類 class A(object):def __init__(self):self.car='20款奔馳'def print_car(self):print('老款%s'%self.car)def lao_car(self):print('20的大奔')class B(object):def __init__(self):self.car='21款背馳'def print_car(self):print('新款%s'%self.car)def xin_car(self):print('21的大奔') # 子類 class C(A,B):passc=C() print(c.car) c.print_car() c.lao_car() c.xin_car()
案例2:
多繼承可以繼承多個(gè)父類,也繼承了所有父類的屬性和方法
注意:如果多個(gè)父類中有同名的 屬性和方法,則默認(rèn)使用第一個(gè)父類的屬性和方法(根據(jù)類的魔法屬性mro的順序來查找)
多個(gè)父類中,不重名的屬性和方法,不會(huì)有任何影響。
4.子類重寫父類的同名屬性和方法
案例:
# 父類 class A(object):def __init__(self):self.car='20款奔馳'def print_car(self):print('老款%s'%self.car)class B(object):def __init__(self):self.car='21款背馳'def print_car(self):print('新款%s'%self.car) # 子類 class C(B,A):def __init__(self):self.car='22款奔馳'def print_car(self):print('最新款%s'%self.car) c=C() print(c.car) # 執(zhí)行B的屬性 c.print_car() # 執(zhí)行B的方法 print(C.__mro__) # 子類的魔法屬性__mro__決定了屬性和方法的查找順序
5.子類調(diào)用父類同名屬性和方法
案例:
# 父類 class A(object):def __init__(self):self.car='20款奔馳'def print_car(self):print('老款%s'%self.car)class B(object):def __init__(self):self.car='21款背馳'def print_car(self):print('新款%s'%self.car) # 子類 class C(B,A):def __init__(self):self.car='22款奔馳'def print_car(self):print('執(zhí)行子類的__init__方法前,self.car的屬性:%s'%self.car)self.__init__() # 執(zhí)行本類的__init__方法,屬性初始化print('執(zhí)行子類的__init__方法前,self.car的屬性:%s' % self.car)print('最新款%s'%self.car)def print_lao_car(self):print('執(zhí)行A的__init__方法前,self.car的屬性:%s' % self.car)A.__init__(self) # 執(zhí)行本類的__init__方法,屬性初始化print('執(zhí)行A的__init__方法前,self.car的屬性:%s' % self.car)A.print_car(self)def print_xin_car(self):print('執(zhí)行B的__init__方法前,self.car的屬性:%s' % self.car)B.__init__(self) # 執(zhí)行本類的__init__方法,屬性初始化print('執(zhí)行B的__init__方法前,self.car的屬性:%s' % self.car)B.print_car(self)c=C() c.print_car() print('*'*10) c.print_lao_car() print('*'*10) c.print_xin_car() print('*'*10) c.print_car()
6.多層繼承
7.調(diào)用父類方法super()
案例:
class Animal(object):def play(self):print('動(dòng)物就是玩') class Dog(Animal):def play(self):super().play()print('狗改不了吃屎') d=Dog() d.play()
8.案例
總結(jié)
以上是生活随笔為你收集整理的Python中面向对象的讲解(2)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python中面向对象的讲解(1)
- 下一篇: Python中面向对象的讲解(3)