python对象继承
繼承允許我們在兩個或者更多的類之間創建一種“是一個”的關系,這種關系把共同的細節抽象到一個超類里。
從技術上講,每一個我們創建的類都使用了繼承,所有的python類都是一個叫做object的特殊類的子類,如果我們不具體指明我們的類從其他類繼承,那這個類自動從object繼承過來。通過如下的語法,我們可以公開聲明我們的類從object繼承:
class MySubClass(object):pass其中,object就是父類或者說是超類。MySubClass是子類。可以說是子類來源于父類,或者說是子類擴展了父類。
class Contact:all_contacts = []def __init__(self, name, email):self.name = nameself.email = emailContact.all_contacts.append(self)上面的例子中介紹了類變量,all_contacts的列表,它屬于類定義中的一部分,會被這個類所有的實例共享。這里只有一個Contact.all_contacts列表,如果我們在任何一個對象調用self.all_contacts,他會引用這個列表。在初始化函數里面創建了一個新的contact類,這個列表會自動把這個對象添加進來。要小心這種用法,因為如果曾經使用self.all_contacts給這個變量賦值,那么將會在這個對象里面創建一個新的實例變量,這個類變量將會保持不變并且可以通過Contact.all_contacts訪問到。
如果需要在聯系人中添加供應商信息,則如下:
class Supplier(Contact):def order(self, order):print("If this were a real system we would send ""{} order to {}".format(order, self.name))將上述的兩端代碼保存為腳本,然后使用python -i導入這個腳本,在交互的解釋器中執行如下的語句
$ python -i order.py >>> c = Contact("Some Body", "somebody@example.net") >>> s = Supplier("Supplier", "supplier@example.net") >>> print(c.name, c.email, s.name, s.email) Some Body somebody@example.net Supplier supplier@example.net >>> c.all_contacts [<__main__.Contact object at 0x106eeefd0>, <__main__.Supplier object at 0x106f0f048>] >>> c.all_contacts[0] <__main__.Contact object at 0x106eeefd0> >>> c.all_contacts[0].name 'Some Body' >>> c.all_contacts[1].name 'Supplier' >>> c.all_contacts[1].email 'supplier@example.net' >>> c.all_contacts[0].email 'somebody@example.net' >>> c.order("I need pliers") Traceback (most recent call last):File "<stdin>", line 1, in <module> AttributeError: 'Contact' object has no attribute 'order' >>> s.order("I need pliers") If this were a real system we would send I need pliers order to Supplier >>>?那么現在我們的Supplier類可以做任何Contact類可以做的事情,包括把自己添加到all_contacts這個列表中,和一個供應商需要處理的所有特殊的事情。這就是繼承的魅力。
?
參考:
1、《Python3 面向對象編程》 [加]Dusty Philips 著
轉載于:https://www.cnblogs.com/anovana/p/8136095.html
總結
以上是生活随笔為你收集整理的python对象继承的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: awk的基础应用
- 下一篇: Python之路【第十篇】:索引与切片的