天天看點

Python面向對象程式設計(二)

Python面向對象程式設計(二)

  在前面一篇文章中談到了類的基本定義和使用方法,這隻展現了面向對象程式設計的三大特點之一:封裝。下面就來了解一下另外兩大特征:繼承和多态。

  在Python中,如果需要的話,可以讓一個類去繼承一個類,被繼承的類稱為父類或者超類、也可以稱作基類,繼承的類稱為子類。并且Python支援多繼承,能夠讓一個子類有多個父類。

一.繼承和多繼承

  在Python中類的繼承定義基本形式如下:

<a></a>

  在定義一個類的時候,可以在類名後面緊跟一對括号,在括号中指定所繼承的父類,如果有多個父類,多個父類名之間用逗号隔開。以大學裡的學生和老師舉例,可以定義一個父類UniversityMember,然後類Student和類Teacher分别繼承類UniversityMember:

  在大學中的每個成員都有姓名和年齡,而學生有學号和分數這2個屬性,老師有教工号和工資這2個屬性,從上面的代碼中可以看到:

  1)在Python中,如果父類和子類都重新定義了構造方法__init( )__,在進行子類執行個體化的時候,子類的構造方法不會自動調用父類的構造方法,必須在子類中顯示調用。

  2)如果需要在子類中調用父類的方法,需要以   父類名.方法  這種方式調用,以這種方式調用的時候,注意要傳遞self參數過去。

  對于繼承關系,子類繼承了父類所有的公有屬性和方法,可以在子類中通過父類名來調用,而對于私有的屬性和方法,子類是不進行繼承的,是以在子類中是無法通過父類名來通路的。

  對于多重繼承,比如

  class SubClass(SuperClass1,SuperClass2)

  此時有一個問題就是如果SubClass沒有重新定義構造方法,它會自動調用哪個父類的構造方法?這裡記住一點:以第一個父類為中心。如果SubClass重新定義了構造方法,需要顯示去調用父類的構造方法,此時調用哪個父類的構造方法由你自己決定;若SubClass沒有重新定義構造方法,則隻會執行第一個父類的構造方法。并且若SuperClass1和SuperClass2中有同名的方法,通過子類的執行個體化對象去調用該方法時調用的是第一個父類中的方法。

二.多态

  

Python面向對象程式設計(二)

  這種看法過于片面,Java以及C++是編譯性語言,它們展現多态這種特性的方式和Python不同,是以不能隻憑Java和C++中那種思維來了解Python中的多态,Python以它這種獨有的方式展現多态的根本原因我覺得有兩點:1)Python是解釋性語言;2)Python中變量是弱類型的。是以Python展現多态的方式和Java決然不同,但是不能因為同Java中展現多态的方式不同就認為Python不支援多态,這種想法過于片面。

  關于Python面向對象程式設計暫時就講解這麼多了,至于如何設計類讓它更符合軟體工程的範疇和原則,這個暫時不在讨論範圍之内,有興趣的朋友可以看一下《大話設計模式》以及《Head First設計模式》這些書籍。

本文轉載自海 子部落格園部落格,原文連結:http://www.cnblogs.com/dolphin0520/archive/2013/04/03/2997499.html如需轉載自行聯系原作者