Python中的super()方法使用簡介

來源:互聯網
上載者:User
子類裡訪問父類的同名屬性,而又不想直接引用父類的名字,因為說不定什麼時候會去修改它,所以資料還是只保留一份的好。其實呢,還有更好的理由不去直接引用父類的名字,
這時候就該super()登場啦——

class A: def m(self):  print('A')class B(A): def m(self):  print('B')  super().m()B().m()

當然 Python 2 裡super() 是一定要參數的,所以得這麼寫:

class B(A): def m(self):  print('B')  super(B, self).m()

super在單繼承中使用的例子:

class Foo():  def __init__(self, frob, frotz)    self.frobnicate = frob    self.frotz = frotzclass Bar(Foo):  def __init__(self, frob, frizzle)    super().__init__(frob, 34)    self.frazzle = frizzle

此例子適合python 3.x,如果要在python2.x下使用則需要稍作調整,如下程式碼範例:

class Foo(object):   def __init__(self, frob, frotz):     self.frobnicate = frob     self.frotz = frotz class Bar(Foo):   def __init__(self, frob, frizzle):     super(Bar,self).__init__(frob,34)     self.frazzle = frizzle new = Bar("hello","world") print new.frobnicate print new.frazzle print new.frotz 

需要提到自己的名字。這個名字也是動態尋找的,在這種情況下替換第三方庫中的類會出問題。

`super()`` 很好地解決了訪問父類中的方法的問題。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.