乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      [每日一題]7、Python中的super()函數(shù)

       Four兄 2019-08-25

      第一時間收到精彩推送!

      Python Every Day, 第 7 天


      我們知道Python是一門面向?qū)ο蟮木幊陶Z言,既然面向?qū)ο缶蜕俨涣死^承。

      繼承:表示子類可以使用其父類中方法。

      在Python中,可以通過super() 函數(shù)來調(diào)用父類的方法。

      如下所示,我定義了一個 Person 類,有 說、唱、rap、籃球 這四個 方法。

      class Person():
          def speak(self):
              print('i can speak')

          def sing(self):
              print('i can sing')

          def rap(self):
              print('i can rap')

          def basketball(self):
              print('i can basketball')

      如果只有一個類 直接實例化.函數(shù)名的方式進行調(diào)用即可。

      假設(shè)我現(xiàn)在有個Student (學(xué)生類),同樣也可以說、唱、Rap、籃球。如果再重新寫一遍這四個函數(shù)就比較麻煩。因此這個時候就可以用到繼承。學(xué)生類來繼承Person類(也就是說Student是Person的子類,Person是Student的父類)

      如下所示

      # Student(Object) 括號中的類,表示要繼承的類
      class Student(Person):
          pass

      # Student1(Object) 括號中的類,表示要繼承的類
      class Student1(Person):
          def study(self):
              print('i like study')

      if __name__ == '__main__':
          # 實例化一個Student對象
          s = Student()
          s.rap()  #  i can rap
          s.basketball() # i can basketball

          s1 = Student1()
          s1.rap()  # i can rap
          s1.study() # i like study

      Student、Student1 都繼承了Person類。

      Student只會 說、唱、rap、籃球。而Student1 還喜歡學(xué)習(xí)??梢栽俣x一個study函數(shù)。

      上面只是用簡單的代碼介紹了一下Python中的繼承。還沒有說到如何用super()來調(diào)用父類的方法。

      在子類中如果需要去掉用父類的方法時,可以通過 super(). 父類方法 的形式完成。

      示例:

      class A:
          def get_name(self):
              return 'my name is xiaoming'


      class B(A):
          def my_info(self):
              print('i am 18 years old')
              # 通過super() 函數(shù) 調(diào)用父類A 中的get_name函數(shù),返回字符串
              print(super().get_name())
              print('i like rap and basketball')


      if __name__ == '__main__':
          b = B()
          '''
          輸出:
          i am 18 years old
          my name is xiaoming
          i like rap and basketball
          '''

          b.my_info()

      在B方法中調(diào)用my_info 時,可以直接通過父類A中的get_name 方法 獲取到名字。

      問題: 如果一個子類繼承了兩個父類,并且父類中的方法名相同。那究竟會調(diào)用哪個類呢?

      這個問題可以通過類的內(nèi)置屬性 __mro__ 去查看調(diào)用順序。這個方法主要是在多繼承時判斷方法、屬性的調(diào)用路徑。

      class A:
          num = 1
          def method(self):
              print('A ..method')

      class B:
          num = 2
          def method(self):
              print('B .. method')


      class C(A, B):
          num = 3
          pass

      if __name__ == '__main__':
          c = C()
          print(C.__mro__)  # (<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class 'object'>)
          print(c.num)  #  3
          c.method()  # A ..method

      如上,C.__mro__ 打印結(jié)果可以執(zhí)行順序為 C -> A - >B

      因此print(c.num)。因為c中有num屬性,所以會打印3.

      執(zhí)行c.method時 。因為c中沒有method屬性,會去A中查找,則輸出 A..method。

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多