python对象继承
繼承允許我們?cè)趦蓚€(gè)或者更多的類之間創(chuàng)建一種“是一個(gè)”的關(guān)系,這種關(guān)系把共同的細(xì)節(jié)抽象到一個(gè)超類里。
從技術(shù)上講,每一個(gè)我們創(chuàng)建的類都使用了繼承,所有的python類都是一個(gè)叫做object的特殊類的子類,如果我們不具體指明我們的類從其他類繼承,那這個(gè)類自動(dòng)從object繼承過(guò)來(lái)。通過(guò)如下的語(yǔ)法,我們可以公開(kāi)聲明我們的類從object繼承:
class MySubClass(object):pass其中,object就是父類或者說(shuō)是超類。MySubClass是子類。可以說(shuō)是子類來(lái)源于父類,或者說(shuō)是子類擴(kuò)展了父類。
class Contact:all_contacts = []def __init__(self, name, email):self.name = nameself.email = emailContact.all_contacts.append(self)上面的例子中介紹了類變量,all_contacts的列表,它屬于類定義中的一部分,會(huì)被這個(gè)類所有的實(shí)例共享。這里只有一個(gè)Contact.all_contacts列表,如果我們?cè)谌魏我粋€(gè)對(duì)象調(diào)用self.all_contacts,他會(huì)引用這個(gè)列表。在初始化函數(shù)里面創(chuàng)建了一個(gè)新的contact類,這個(gè)列表會(huì)自動(dòng)把這個(gè)對(duì)象添加進(jìn)來(lái)。要小心這種用法,因?yàn)槿绻?jīng)使用self.all_contacts給這個(gè)變量賦值,那么將會(huì)在這個(gè)對(duì)象里面創(chuàng)建一個(gè)新的實(shí)例變量,這個(gè)類變量將會(huì)保持不變并且可以通過(guò)Contact.all_contacts訪問(wèn)到。
如果需要在聯(lián)系人中添加供應(yīng)商信息,則如下:
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導(dǎo)入這個(gè)腳本,在交互的解釋器中執(zhí)行如下的語(yǔ)句
$ 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 >>>?那么現(xiàn)在我們的Supplier類可以做任何Contact類可以做的事情,包括把自己添加到all_contacts這個(gè)列表中,和一個(gè)供應(yīng)商需要處理的所有特殊的事情。這就是繼承的魅力。
?
參考:
1、《Python3 面向?qū)ο缶幊獭?[加]Dusty Philips 著
轉(zhuǎn)載于:https://www.cnblogs.com/anovana/p/8136095.html
總結(jié)
以上是生活随笔為你收集整理的python对象继承的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: awk的基础应用
- 下一篇: Python之路【第十篇】:索引与切片的