Python是一門(mén)十分常用的編程語(yǔ)言。在Python中,類是一個(gè)非常重要的概念。Python中的類可以被派生。下面我們來(lái)學(xué)習(xí)一下Python類的派生。
class Animal: def __init__(self, name): self.name = name class Dog(Animal): def bark(self): print('汪汪!') dog = Dog('旺財(cái)') print(dog.name) dog.bark()
在上述代碼中,我們定義了一個(gè)動(dòng)物類(Animal),以及一個(gè)派生于動(dòng)物類的狗類(Dog)。在狗類中,我們還定義了一個(gè)狗特有的方法——汪汪。我們通過(guò)實(shí)例化狗類,給狗取名字并輸出其名字,最后讓狗汪汪。
需要注意的是,在狗類中我們沒(méi)有重寫(xiě)動(dòng)物類的構(gòu)造函數(shù)(__init__),而是繼承了動(dòng)物類的構(gòu)造函數(shù)。這是因?yàn)槲覀冊(cè)诙x狗類時(shí)使用了括號(hào)括起來(lái)的Animal。這一操作使得狗類繼承了動(dòng)物類的屬性與方法。如果狗類中有和動(dòng)物類相同的方法名,那么優(yōu)先調(diào)用狗類的函數(shù)。
類的派生通常用于擴(kuò)展已有的類,在已有類的基礎(chǔ)上加入新的功能。例如,我們可以定義一個(gè)更加復(fù)雜的狗類,讓它有更多獨(dú)特的方法和屬性。
下面給出一個(gè)更加復(fù)雜的狗類的例子:class Animal: def __init__(self, name): self.name = name class Dog(Animal): def __init__(self, name, age, breed): super().__init__(name) self.age = age self.breed = breed def bark(self): print('汪汪!') def fetch(self, thing): print(self.name, '正在追逐', thing) dog = Dog('旺財(cái)', 2, '柴犬') print(dog.name) print(dog.age) print(dog.breed) dog.bark() dog.fetch('球')
在這個(gè)例子中,我們定義了一個(gè)更加復(fù)雜的狗類。該狗類新增了年齡和品種兩個(gè)屬性,以及追逐東西的功能。我們通過(guò) super() 函數(shù)調(diào)用了動(dòng)物類的構(gòu)造函數(shù),使得狗類既擁有了動(dòng)物類的屬性和方法,又新增了獨(dú)特的屬性和方法。
在使用類的派生時(shí),需要注意一些細(xì)節(jié)問(wèn)題。例如,如果父類的構(gòu)造函數(shù)需要傳入?yún)?shù),在子類的構(gòu)造函數(shù)中需要用 super() 函數(shù)來(lái)調(diào)用父類的構(gòu)造函數(shù)并傳入?yún)?shù);如果子類中有和父類相同的屬性或方法名,需要重寫(xiě)這些屬性或方法。