繼承是對已有的類進行擴展創建出新的類,這個過程就叫做繼承。其中,提供繼承信息的類叫做父類(超類、基類),得到繼承信息的類稱為子類(派生類)。
基本語法
繼承是通過在類定義語句中使用圓括號來指定父類(或基類)來實現的。
如:
class Person: def __init__(self, name, age): self.name = name self.age = age def introduce(self): print(f"Hello, my name is {self.name} and I am {self.age} years old.") class Student(Person): def __init__(self, name, age, student_id): # 調用父類的__init__方法 super().__init__(name, age) # 添加子類特有的屬性 self.student_id = student_id def show_student_info(self): print(f"Student Information:") print(f"Name: {self.name}") print(f"Age: {self.age}") print(f"Student ID: {self.student_id}")
如上,定義了簡單的Person
類,該類有兩個基本屬性:name
(名字)和age
(年齡),并且有一個introduce
方法用于介紹自己。Student
類使用圓括號來指定繼承自Person
類,并添加了一個額外的屬性student_id
(學生ID)和一個方法show_student_info
用于顯示學生的詳細信息。
繼承的特點
-
單繼承與多繼承:Python支持單繼承和多繼承。在定義類時,如果基類只有一個,則為單繼承;如果基類有多個,則為多繼承。多繼承的語法是在類定義時,將多個基類放在圓括號中,用逗號分隔。如:
class Vehicle: """交通工具"""def __init__(self, make, model): self.make = make self.model = model def start_engine(self): print(f"Starting the engine of the {self.make} {self.model}...") class ElectronicDevice: """電子設備"""def __init__(self, battery_life): self.battery_life = battery_life def check_battery(self): print(f"Battery life is {self.battery_life}%.") # Car類同時繼承自Vehicle和ElectronicDevice class Car(Vehicle, ElectronicDevice):"""汽車"""def __init__(self, make, model, battery_life): # 調用Vehicle的__init__ Vehicle.__init__(self, make, model) # 調用ElectronicDevice的__init__ ElectronicDevice.__init__(self, battery_life)
在實際編程中,如果不是必須使用多重繼承,就盡量使用單一繼承,假如非要使用多重繼承,也要盡量避免出現菱形繼承(如一個類繼承兩個父類,但是這兩個父類又繼承同一個父類),否則代碼可讀性和可理解性將變得非常糟糕。
-
方法重寫(Override):子類可以定義與父類同名的方法,這種方法被稱為方法重寫。當子類對象調用這個方法時,會執行子類定義的方法,而不是父類中的方法。如:
# 定義父類Animal class Animal: def __init__(self, name): self.name = name # 父類中的speak方法 def speak(self): print(f"{self.name} makes a sound.") # 定義子類Dog,繼承自Animal class Dog(Animal): # 重寫父類中的speak方法 def speak(self): print(f"{self.name} says Woof!") # 使用 my_dog = Dog("Buddy") my_dog.speak() # 輸出: Buddy says Woof!
-
super()函數:
super()
函數是用于調用父類(超類)的一個方法。super()
在子類的方法中調用父類的方法時非常有用。如在上面重寫的方法中,我們可以通過super()來調用父類方法。class Dog(Animal): # 重寫父類中的speak方法 def speak(self): # 調用父類的speak方法super().speak() # 重寫 print(f"{self.name} says Woof!") # 使用 my_dog = Dog("Buddy") my_dog.speak() # 輸出: Buddy makes a sound. Buddy says Woof!
-
繼承的傳遞性:如果類C繼承自類B,類B又繼承自類A,那么類C同時繼承了類B和類A的屬性和方法。這稱為繼承的傳遞性。
總結:
繼承是一種is-a的關系,如有一個父類:Person,然后3個子類:student、teacher、programmer。它們的關系是:
a student is a person.
a teacher is a person.
a programmer is a person.
子類直接從父類繼承公共的屬性和行為,再添加自己特有的屬性和行為,所以子類一定是比父類更強大的,任何時候都可以使用子類對象去代替父類對象。