Python類的繼承
在OOP(ObjectOrientedProgramming)程序設計中,當我們定義一個class的時候,可以從某個現有的class繼承,新的class稱為子類(Subclass),而被繼承的class稱為基類、父類或超類(Baseclass、Superclass)。
我們先來定義一個classPerson,表示人,定義屬性變量name及sex(姓名和性別);
定義一個方法print_title():當sex是male時,printman;當sex是female時,printwoman。參考如下代碼:
class Person(object): def __init__(self,name,sex): self.name = name self.sex = sex def print_title(self): if self.sex == "male": print("man") elif self.sex == "female": print("woman")class Child(Person): # Child 繼承 Person pass May = Child("May","female")Peter = Person("Peter","male")print(May.name,May.sex,Peter.name,Peter.sex) # 子類繼承父類方法及屬性May.print_title()Peter.print_title()而我們編寫Child類,完全可以繼承Person類(Child就是Person);使用classsubclass_name(baseclass_name)來表示繼承;
繼承有什么好處?最大的好處是子類獲得了父類的全部屬性及功能。如下Child類就可以直接使用父類的print_title()方法
實例化Child的時候,子類繼承了父類的構造函數,就需要提供父類Person要求的兩個屬性變量name及sex:
在繼承關系中,如果一個實例的數據類型是某個子類,那它也可以被看做是父類(May既是Child又是Person)。但是,反過來就不行(Peter僅是Person,而不是Child)。
繼承還可以一級一級地繼承下來,就好比從爺爺到爸爸、再到兒子這樣的關系。而任何類,最終都可以追溯到根類object,這些繼承關系看上去就像一顆倒著的樹。比如如下的繼承樹:

isinstance()及issubclass()
Python與其他語言不同點在于,當我們定義一個class的時候,我們實際上就定義了一種數據類型。我們定義的數據類型和Python自帶的數據類型,比如str、list、dict沒什么兩樣。
Python有兩個判斷繼承的函數:isinstance()用于檢查實例類型;issubclass()用于檢查類繼承。參見下方示例:
class Person(object): passclass Child(Person): # Child 繼承 Person passMay = Child()Peter = Person() print(isinstance(May,Child)) # Trueprint(isinstance(May,Person)) # Trueprint(isinstance(Peter,Child)) # Falseprint(isinstance(Peter,Person)) # Trueprint(issubclass(Child,Person)) # True
Python類的多態
在說明多態是什么之前,我們在Child類中重寫print_title()方法:若為male,printboy;若為female,printgirl
class Person(object): def __init__(self,name,sex): self.name = name self.sex = sex def print_title(self): if self.sex == "male": print("man") elif self.sex == "female": print("woman")class Child(Person): # Child 繼承 Person def print_title(self): if self.sex == "male": print("boy") elif self.sex == "female": print("girl") May = Child("May","female")Peter = Person("Peter","male")print(May.name,May.sex,Peter.name,Peter.sex)May.print_title()Peter.print_title()
新聞熱點
疑難解答