Tuesday, February 11, 2025

[Python] Lesson 39 – Multilevel inheritance

-

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ừ ChildParent.

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 namecolor 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 widthheight, 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ị widthheight 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.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories