Multilevel inheritance là một dạng kế thừa trong lập trình hướng đối tượng, trong đó một class kế thừa từ một class khác, và class đó lại được kế thừa bởi một class khác. Điều này cho phép các class có thể kế thừa các thuộc tính và phương thức từ nhiều class khác nhau.
Cú pháp khai báo của multilevel inheritance như sau:
class Parent:
# code của Parent class
class Child(Parent):
# code của Child class
class Grandchild(Child):
# code của Grandchild class
Trong đó, class Child
kế thừa từ Parent
, và Grandchild
kế thừa từ Child
. Điều này cho phép Grandchild
kế thừa các thuộc tính và phương thức từ Child
và Parent
.
Dưới đây là 3 ví dụ minh hoạ:
Ví dụ 1:
class Animal:
def __init__(self, name, color):
self.name = name
self.color = color
class Cat(Animal):
def purr(self):
print("Purr...")
class Siamese(Cat):
def describe(self):
print(f"I am a Siamese cat named {self.name}, and I am {self.color}.")
Trong ví dụ này, Siamese
là một class con của Cat
, mà cũng là một class con của Animal
. Siamese
kế thừa thuộc tính name
và color
từ Animal
, và phương thức purr
từ Cat
. Ngoài ra, Siamese
có phương thức riêng là describe
.
Ví dụ 2:
class Shape:
def area(self):
pass
class Rectangle(Shape):
def __init__(self, width, height):
self.width = width
self.height = height
def area(self):
return self.width * self.height
class Square(Rectangle):
def __init__(self, side):
super().__init__(side, side)
class Cube(Square):
def area(self):
face_area = super().area()
return face_area * 6
Trong ví dụ này, Rectangle
là một class con của Shape
, Square
là một class con của Rectangle
, và Cube
là một class con của Square
. Rectangle
có thuộc tính width
và height
, và phương thức area
được định nghĩa lại để tính diện tích hình chữ nhật. Square
kế thừa thuộc tính và phương thức từ Rectangle
, nhưng giá trị width
và height
của nó được đặt bằng nhau. Cube
kế thừa từ Square
, và định nghĩa lại phương thức area
để tính diện tích mặt của một khối lập phương.
Ví dụ 3:
Trong hệ thống quản lý tập tin của Linux, có thể sử dụng multilevel inheritance để mô hình hóa các tính năng của các đối tượng tập tin khác nhau, như thư mục, file thực thi và file văn bản.
Ví dụ, ta có thể định nghĩa một class cha File để đại diện cho tất cả các đối tượng tập tin, với các thuộc tính như tên tập tin và đường dẫn đến tập tin. Sau đó, ta có thể định nghĩa các class con như Directory, ExecutableFile và TextFile để mô hình hóa các tính năng riêng biệt của các loại tập tin này.
Ví dụ code:
class File:
def __init__(self, name, path):
self.name = name
self.path = path
class Directory(File):
def __init__(self, name, path):
super().__init__(name, path)
self.files = []
def add_file(self, file):
self.files.append(file)
class ExecutableFile(File):
def __init__(self, name, path, permission):
super().__init__(name, path)
self.permission = permission
class TextFile(File):
def __init__(self, name, path, content):
super().__init__(name, path)
self.content = content
Trong ví dụ này, class File là class cha, trong khi Directory, ExecutableFile và TextFile là các class con được kế thừa từ class cha File. Các class con này có các thuộc tính và phương thức riêng để mô hình hóa các tính năng riêng biệt của từng loại tập tin.
Ví dụ trên minh họa cách sử dụng multilevel inheritance để mô hình hóa các tính năng của các loại tập tin trong hệ thống quản lý tập tin của Linux.