人妖在线一区,国产日韩欧美一区二区综合在线,国产啪精品视频网站免费,欧美内射深插日本少妇

新聞動態(tài)

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

發(fā)布日期:2021-12-27 21:15 | 文章來源:CSDN

1.繼承

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

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

案例:

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

2.單繼承

子類只繼承一個父類

案例:

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

子類在繼承的時候,在定義類時,小括號()中為父類的名字
父類的屬性、方法,會被繼承給子類

3.多繼承

子類繼承多個父類

案例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):
 pass
c=C()
print(c.car)
c.print_car()
c.lao_car()
c.xin_car()

案例2:

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

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

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.多層繼承

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類的__init__方法,屬性初始化
  A.print_car(self)
 def print_xin_car(self):
  B.__init__(self)  # 執(zhí)行B類的__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)用父類方法super()

案例:

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

8.案例

class Gupiao(object):
 def xinqing(self):
  print('股票買入和賣出')
class Gongmu(Gupiao):
 def lianghua(self):
  super().xinqing()
  print('公募機構(gòu)買入和賣出')
class Simu(Gupiao):
 def lianghua(self):
  Gupiao.__init__(self)
  Gupiao.xinqing(self)
  print('私募機構(gòu)買入和賣出')
 def xinqing(self):
  print('專研自己的輸出股票和私募買入和賣出')
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)容請搜索本站以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持本站!

版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。

相關(guān)文章

實時開通

自選配置、實時開通

免備案

全球線路精選!

全天候客戶服務(wù)

7x24全年不間斷在線

專屬顧問服務(wù)

1對1客戶咨詢顧問

在線
客服

在線客服:7*24小時在線

客服
熱線

400-630-3752
7*24小時客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部