欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python中關(guān)于面向?qū)ο笾欣^承的詳細(xì)講解

 更新時(shí)間:2021年10月08日 14:52:26   作者:測(cè)試領(lǐng)頭羊  
面向?qū)ο缶幊?(OOP) 語(yǔ)言的一個(gè)主要功能就是“繼承”。繼承是指這樣一種能力:它可以使用現(xiàn)有類(lèi)的所有功能,并在無(wú)需重新編寫(xiě)原來(lái)的類(lèi)的情況下對(duì)這些功能進(jìn)行擴(kuò)展

1.繼承

在程序中,繼承描述的是多個(gè)類(lèi)之間的所屬關(guān)系。

如果一個(gè)類(lèi)A里面的屬性和方法可以復(fù)用,則可以通過(guò)繼承的方式,傳遞到類(lèi)B里。
那么類(lèi)A就是基類(lèi),也叫做父類(lèi);類(lèi)B就是派生類(lèi),也叫做子類(lèi)。

案例:

# 父類(lèi)
class A(object):
    def __init__(self):
        self.num=50
    def print_num(self):
        print(self.num+100)
# 子類(lèi)
class B(A):
    pass
b=B()
print(b.num)
b.print_num()

在這里插入圖片描述

2.單繼承

子類(lèi)只繼承一個(gè)父類(lèi)

案例:

# 父類(lèi)
class A(object):
    def __init__(self):
        self.car='20款奔馳'
    def print_car(self):
        print('老款%s'%self.car)
# 子類(lèi)
class B(A):
    pass

a=A()
print(a.car)
a.print_car()

b=B()
print(b.car)
b.print_car()

在這里插入圖片描述

子類(lèi)在繼承的時(shí)候,在定義類(lèi)時(shí),小括號(hào)()中為父類(lèi)的名字
父類(lèi)的屬性、方法,會(huì)被繼承給子類(lèi)

3.多繼承

子類(lèi)繼承多個(gè)父類(lèi)

案例1:

# 父類(lèi)
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的大奔')
# 子類(lèi)
class C(A,B):
    pass

c=C()
print(c.car)
c.print_car()
c.lao_car()
c.xin_car()

在這里插入圖片描述

案例2:

# 父類(lèi)
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的大奔')
# 子類(lèi)
class C(B,A):
    pass
c=C()
print(c.car) # 執(zhí)行B的屬性
c.print_car() # 執(zhí)行B的方法
print(C.__mro__) # 子類(lèi)的魔法屬性__mro__決定了屬性和方法的查找順序
c.lao_car() # 不重名不受影響
c.xin_car()

在這里插入圖片描述

多繼承可以繼承多個(gè)父類(lèi),也繼承了所有父類(lèi)的屬性和方法
注意:如果多個(gè)父類(lèi)中有同名的 屬性和方法,則默認(rèn)使用第一個(gè)父類(lèi)的屬性和方法(根據(jù)類(lèi)的魔法屬性mro的順序來(lái)查找)
多個(gè)父類(lèi)中,不重名的屬性和方法,不會(huì)有任何影響。

4.子類(lèi)重寫(xiě)父類(lèi)的同名屬性和方法

案例:

# 父類(lèi)
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)
# 子類(lèi)
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__) # 子類(lèi)的魔法屬性__mro__決定了屬性和方法的查找順序

在這里插入圖片描述

5.子類(lèi)調(diào)用父類(lèi)同名屬性和方法

案例:

# 父類(lèi)
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)
# 子類(lèi)
class C(B,A):
    def __init__(self):
        self.car='22款奔馳'
    def print_car(self):
        print('執(zhí)行子類(lèi)的__init__方法前,self.car的屬性:%s'%self.car)
        self.__init__() # 執(zhí)行本類(lèi)的__init__方法,屬性初始化
        print('執(zhí)行子類(lèi)的__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í)行本類(lèi)的__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í)行本類(lèi)的__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.多層繼承

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款奔馳'
        self.money=40
    def print_car(self):
        self.__init__()
        print('最新款%s'%self.car)
    def print_lao_car(self):
        A.__init__(self)  # 執(zhí)行A類(lèi)的__init__方法,屬性初始化
        A.print_car(self)
    def print_xin_car(self):
        B.__init__(self)  # 執(zhí)行B類(lèi)的__init__方法,屬性初始化
        B.print_car(self)
class D(C): # 多層繼承
    pass
d=D()
d.print_car()
d.print_lao_car()
d.print_xin_car()

在這里插入圖片描述

在這里插入圖片描述

7.調(diào)用父類(lèi)方法super()

案例:

class Animal(object):
    def play(self):
        print('動(dòng)物就是玩')
class Dog(Animal):
    def play(self):
        super().play()
        print('狗改不了吃屎')
d=Dog()
d.play()

在這里插入圖片描述

8.案例

class Gupiao(object):
    def xinqing(self):
        print('股票買(mǎi)入和賣(mài)出')

class Gongmu(Gupiao):
    def lianghua(self):
        super().xinqing()
        print('公募機(jī)構(gòu)買(mǎi)入和賣(mài)出')

class Simu(Gupiao):
    def lianghua(self):
        Gupiao.__init__(self)
        Gupiao.xinqing(self)
        print('私募機(jī)構(gòu)買(mǎi)入和賣(mài)出')

    def xinqing(self):
        print('專(zhuān)研自己的輸出股票和私募買(mǎi)入和賣(mài)出')

g=Gongmu()
g.lianghua()
print('*'*10)
s=Simu()
s.lianghua()
s.xinqing()

在這里插入圖片描述

到此這篇關(guān)于Python中關(guān)于面向?qū)ο笾欣^承的詳細(xì)講解的文章就介紹到這了,更多相關(guān)Python 面向?qū)ο?繼承內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論