Multiple inheritance trong Python cho phép một class có thể kế thừa từ nhiều class khác nhau. Cú pháp khai báo class với multiple inheritance là kết hợp các class cha trong dấu ngoặc đơn.
Cú pháp:
class ClassA:
pass
class ClassB:
pass
class ClassC(ClassA, ClassB):
pass
Trong đó, ClassC
kế thừa từ ClassA
và ClassB
.
Ví dụ 1:
class Animal:
def __init__(self, name):
self.name = name
class Flyable:
def fly(self):
print("Flying...")
class Bird(Animal, Flyable):
pass
class Mammal(Animal):
pass
class Bat(Mammal, Flyable):
pass
bird = Bird("Sparrow")
bird.fly() # Output: Flying...
bat = Bat("Fruit bat")
bat.fly() # Output: Flying...
Trong ví dụ trên, Animal
là class cha cơ bản, Flyable
là class cha kế thừa về khả năng bay của động vật, Bird
và Bat
kế thừa từ Animal
và Flyable
, Bird
là loài chim có khả năng bay, Bat
là loài động vật có vú có khả năng bay.
Ví dụ 2:
class Car:
def __init__(self, brand, model, color):
self.brand = brand
self.model = model
self.color = color
class ElectricEngine:
def __init__(self, power, battery_life):
self.power = power
self.battery_life = battery_life
def charge(self):
print("Charging the battery...")
class HybridCar(Car, ElectricEngine):
def __init__(self, brand, model, color, power, battery_life, fuel_type):
Car.__init__(self, brand, model, color)
ElectricEngine.__init__(self, power, battery_life)
self.fuel_type = fuel_type
def get_info(self):
print(f"Brand: {self.brand}\nModel: {self.model}\nColor: {self.color}")
print(f"Power: {self.power} kW\nBattery life: {self.battery_life} hours")
print(f"Fuel type: {self.fuel_type}")
def drive(self):
print("Starting the engine...")
car = HybridCar("Toyota", "Prius", "Blue", 60, 5, "Gasoline")
car.get_info()
car.charge()
car.drive()
Trong ví dụ này, ta có 3 class là Car
, ElectricEngine
, và HybridCar
. Car
là class cha đầu tiên và có các thuộc tính như brand
, model
, và color
. ElectricEngine
là class cha thứ hai và có các thuộc tính như power
và battery_life
cùng với phương thức charge()
. HybridCar
là class con, kế thừa từ cả Car
và ElectricEngine
. Nó có thêm thuộc tính fuel_type
và các phương thức riêng như get_info()
và drive()
. Trong ví dụ này, ta sử dụng phương thức __init__()
của cả 2 class cha để khởi tạo các thuộc tính tương ứng cho class con HybridCar
.
Ví dụ trên giả định rằng ta đang xây dựng một chương trình quản lý thông tin xe hơi, bao gồm cả thông tin về động cơ điện và động cơ xăng. Các class Car
và ElectricEngine
là 2 class riêng biệt, nhưng chúng ta lại muốn kết hợp chúng lại với nhau để tạo ra class HybridCar
. Ta sử dụng kỹ thuật multiple inheritance để kế thừa các thuộc tính và phương thức từ cả 2 class cha.
Ví dụ thực tế trong môi trường Linux để quản lý hệ thống:
import os
import shutil
class System:
def __init__(self, name):
self.name = name
def create_directory(self, path):
os.makedirs(path)
class FileOperations:
def copy_file(self, source, destination):
shutil.copyfile(source, destination)
class File(System, FileOperations):
def __init__(self, name, path):
System.__init__(self, name)
self.path = path
file = File("file.txt", "/home/user/")
file.create_directory("/home/user/documents")
file.copy_file("/home/user/file.txt", "/home/user/documents/file.txt")
Trong ví dụ trên, System
là class cha về các hoạt động liên quan đến hệ thống, FileOperations
là class cha về các hoạt động liên quan đến file. File
kế thừa từ cả System
và FileOperations
để có thể thực hiện các hoạt động liên quan đến file và thư mục trong hệ thống.