Python 物件導向 —— super 的使用(Python 2.x vs Python 3.x)__Python

來源:互聯網
上載者:User

注意區分當前的 Python 版本是 2.X 還是 3.X,Python 3.X 在 super 的使用上較之 Python 2.X 有較大的變化; 1. Python 2.x

class Contact(object):    all_contacts = []    def __init__(self, name, email):        self.name = name        self.email = email        Contact.all_contacts.append(self)class Friend(Contact):    def __init__(self, name, email, phone):        super(Friend, self).__init__(name, email)        self.phone = phone

Python 2.x 的環境下,對於需要被繼承的父類,需要顯式地將父類繼承自 object 類,否則在子類使用 super(子類, self).__init__() 時會報 TypeError: must be type, not classobj.

這是因為 Python 2.x 中:

>> class A():       pass>> type(A)classobj>> class A(object):       pass>> type(A)type

而且 Python 2.x 也並不將 classobj 視為 type.

當然子類中使用這樣的語句也是可以的:

class Friend(Contact):    def __init__(self, name, email, phone):        Contact.__init__(self, name, email, phone)        self.phone = phone

python super()用法遇到TypeError: must be type, not classobj 2. Python 3.x

class Contact:    all_contacts = []    def __init__(self, name, email):        self.name = name        self.email = email        Contact.all_contacts.append(self)class Friend(Contact):    def __init__(self, name, email, phone):        super().__init__(name, email)        self.phone = phone

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.