您好,登錄后才能下訂單哦!
本篇文章為大家展示了Python中怎么創建多重繼承,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
Python 多重繼承可能是非常有用的方法。然而,當項目達到某種程度的復雜性之后,過程代碼通常會暴露出其根本缺陷。下面讓我們直接進入上一個示例的面向對象版本,并看看這樣有何變化。
#!/usr/bin/env python from subprocess import Popen, PIPE import re class DiskMonitor(): """Disk Monitoring Class""" def __init__(self, pattern="2[0-9]%", message="CAPACITY WARNING", cmd = "df -h"): self.pattern = pattern self.message = message self.cmd = cmd def disk_space(self): """Disk space capacity flag method""" ps = Popen(self.cmd, shell=True,stdout=PIPE,stderr=PIPE) output_lines = ps.stdout.readlines() for line in output_lines: lineline = line.strip() if re.search(self.pattern,line): print "%s %s" % (self.message,line) class MyDiskMonitor(DiskMonitor): """Customized Disk Monitoring Class""" def disk_space(self): ps = Popen(self.cmd, shell=True,stdout=PIPE,stderr=PIPE) print "RAW DISK REPORT:" print ps.stdout.read() if __name__ == "__main__": d = MyDiskMonitor() d.disk_space()
查看該代碼的面向對象版本,可以看到代碼變得更加抽象。有時,太多的抽象會導致設計問題,但是在此例中,它允許您將問題分離為更多可重用的部分。DiskMonitor 類具有 __init__ method,您可以在其中定義新的參數,并且 disk_space 函數現在是該類中的一個方法。
使用這種新的樣式,您無需更改原始代碼即可容易地重用和自定義各個部分,而使用過程代碼時則通常必須更改原始代碼。Python 多重繼承面向對象的設計的一個更加功能強大、通常也被過度使用的方面是繼承。繼承允許您在新的類中重用和自定義現有的代碼。讓我們在下一個示例中看看繼承可能像什么樣子。
此輸出與前面帶標記的版本區別非常大,因為它只是使用頂部注入的 print 語句來打印的未經篩選的 df –h 命令結果。通過重寫 MyDiskMonitor 類中的方法,您能夠完全改變 disk_space 方法的意圖。
允許您重用其他類中的屬性的 Python 多重繼承是這個“MyDiskMonitor(DiskMonitor)”語句。您只需在定義新類的名稱時,將先前的類的名稱放在括號內。一旦完成此步驟,您立即可以訪問其他類屬性來做自己希望的事情。但是樂趣不僅于此。通過添加另一個通過電子郵件來發送標記消息的方法。
也許是將其命名為 disk_alert(self),這樣就可以進一步自定義新類。這是面向對象的設計的美妙之處;它允許有經驗的開發人員不斷重用已編寫的代碼,從而節省大量的時間。 遺憾的是,面向對象的編程也有其不利的一面。所有這些抽象都是以復雜性為代價的,如果抽象過度,可能會徹底地弄巧成拙。
由于 Python 多重繼承,抽象可以達到相當有害的復雜程度。您是否能夠想象只是為了編寫一個方法也要查看多個文件的情況?無論相信與否,這種情況的確會發生,并且代表了面向對象編程的不幸現實。
上述內容就是Python中怎么創建多重繼承,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。