日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

python重用父類功能的兩種方式實例詳解_python

作者:小小程序員ol ? 更新時間: 2022-11-15 編程語言

在子類派生的新方法中如何重用父類的功能

方式一:指名道姓調用某一個類下的函數=》不依賴于繼承關系

class OldboyPeople:
     def __init__(self,name,age,sex):
         self.name=name
         self.age=age
         self.sex=sex
     def f1(self):
         print('%s say hello' %self.name)
 class Teacher(OldboyPeople):
     def __init__(self,name,age,sex,level,salary):
         OldboyPeople.__init__(self,name,age,sex)

         self.level = level
         self.salary=salary

 tea_obj=Teacher('egon',18,'male',10,3000)
 print(tea_obj.__dict__)

方式二:super()調用父類提供給自己的方法=》嚴格依賴繼承關系

調用super()會得到一個特殊的對象,該對象會參照發起屬性查找的那個類的mro,去當前類的父類中找屬性
提示:在Python2中super的使用需要完整地寫成super(自己的類名,self) ,而在python3中可以簡寫為super()。

 class OldboyPeople:
     def __init__(self,name,age,sex):
         self.name=name
         self.age=age
         self.sex=sex

     def f1(self):
         print('%s say hello' %self.name)
 class Teacher(OldboyPeople):
     def __init__(self,name,age,sex,level,salary):
         # super(Teacher,self).__init__(name,age,sex)
         super().__init__(name,age,sex) # 調用的是方法,自動傳入對象

         self.level = level
         self.salary=salary
 # print(Teacher.mro())
 tea_obj=Teacher('egon',18,'male',10,3000)
 print(tea_obj.__dict__)

super()案例

class A:
    def test(self):
        print('from A')
        super().test()

class B:
    def test(self):
        print('from B')
class C(A,B):
    pass
obj=C()
obj.test()

print(C.mro())

這兩種方式的區別是:

方式一是跟繼承沒有關系的,而方式二的super()是依賴于繼承的,并且即使沒有直接繼承關系,super()仍然會按照MRO繼續往后查找

補充 python重寫父類方法

當父類的方法實現不能滿足子類的時候,可以對方法進行重寫
重寫父類的方法有兩種:

  • 覆蓋父類方法
  • 擴展父類方法

1.覆蓋父類方法

在開發過程中父類實現的方法與子類現完全不同,
可以使用覆蓋的形式,在子類中重新編寫父類的方法
具體的實現形式就是在子類中定義一個與父類同名的方法
重寫父類之后,只會調用子類中重寫后的方法,不會調用
父類中封裝的方法

2)擴展父類方法

如果在開發的過程中,子類的方法實現中,包含父類方法的實現
父類原本封裝的方法實現是子類方法的一部分
使用擴展的方式重寫父類方法:

  • 在子類中重寫父類方法
  • 在需要的位置使用super.父類方法()來調用方法執行
  • 代碼的其它位置針對子類的需求,編寫子類特有的代碼實現

super:

(1)是python中特殊的類
(2)super()就是使用super類創建的對象
(3)常使用在重寫父類方法,調用在父類中封裝的方法實現

'''
重寫方法就是將父類中的方法進行=重新改寫----super()擴展
'''
# 創建一個動物父類
class animal():
? ? def eat(self):
? ? ? ? print('只想吃肉,不想吃飯')
? ? def drink(self):
? ? ? ? print('喝水....')
? ? def sleep(self):
? ? ? ? print('呼呼....')
#創建一個子類--狗類
class Dog(animal):
? ? def call(self,name):
? ? ? ? self.name=name
? ? ? ? print('%s--汪汪....' %self.name)
? ? #重寫睡覺方法
? ? def sleep(self):
? ? ? ? #1.針對子類特有的需求
? ? ? ? print('神犬睡覺')
? ? ? ? #2.使用super().調用父類中原有的方法
? ? ? ? super().sleep()
? ? ? ? #3. 增加其它子類的代碼
? ? ? ? print('$%%&*###')

#創建狗類對象
dog=Dog()
dog.call('哮天犬')
#調用睡覺方法--------此時發現睡覺方法已經被改寫了,不在是‘呼呼....'了
dog.sleep()

原文鏈接:https://www.cnblogs.com/python1111/p/16724164.html

欄目分類
最近更新