No menu items!
No menu items!
More

    [Python] Lesson 45 – Abstract classes

    Abstract classes là một khái niệm trong lập trình hướng đối tượng, cho phép định nghĩa một lớp cha trừu tượng và các phương thức trừu tượng, mà không cần cung cấp triển khai cho chúng.

    Cú pháp khai báo một abstract class trong Python sử dụng module abc như sau:

    from abc import ABC, abstractmethod
    
    class AbstractClass(ABC):
        @abstractmethod
        def do_something(self):
            pass

    Trong đó, ABC là một lớp abstract class, abstractmethod là một decorator được sử dụng để khai báo phương thức trừu tượng.

    Dưới đây là 3 ví dụ về abstract classes:

    – Abstract class với phương thức trừu tượng:

    from abc import ABC, abstractmethod
    
    class Shape(ABC):
        @abstractmethod
        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 Circle(Shape):
        def __init__(self, radius):
            self.radius = radius
    
        def area(self):
            return 3.14 * self.radius * self.radius
    
    # Không thể khởi tạo đối tượng từ abstract class
    # shape = Shape()
    
    rect = Rectangle(5, 10)
    print(rect.area())
    
    circle = Circle(5)
    print(circle.area())

    Trong ví dụ này, Shape là abstract class với phương thức trừu tượng area(), RectangleCircle là các lớp kế thừa từ Shape và ghi đè phương thức area().

    – Abstract class không có phương thức trừu tượng:

    from abc import ABC
    
    class Animal(ABC):
        def eat(self):
            print("I am eating")
    
    class Cat(Animal):
        def meow(self):
            print("Meow")
    
    class Dog(Animal):
        def bark(self):
            print("Bark")
    
    cat = Cat()
    cat.eat()
    cat.meow()
    
    dog = Dog()
    dog.eat()
    dog.bark()

    Trong ví dụ này, Animal là abstract class, không có phương thức trừu tượng. CatDog là các lớp kế thừa từ Animal.

    – Kế thừa từ nhiều abstract class:

    from abc import ABC, abstractmethod
    
    class Shape(ABC):
        @abstractmethod
        def area(self):
            pass
    
    class Color(ABC):
        @abstractmethod
        def fill_color(self):
            pass
    
    class Rectangle(Shape, Color):
        def __init__(self, length, width, color):
            self.length = length
            self.width = width
            self.color = color
        
        def area(self):
            return self.length * self.width
        
        def fill_color(self):
            return f"The rectangle is filled with {self.color} color."

    Trong ví dụ này, chúng ta định nghĩa hai abstract class là ShapeColor, mỗi class đều có một phương thức abstract. Shape có phương thức abstract area()Color có phương thức abstract fill_color().

    Sau đó, chúng ta định nghĩa class Rectangle kế thừa từ cả hai abstract class ShapeColor. Lớp này có các thuộc tính length, width, color và triển khai phương thức area() để tính diện tích của hình chữ nhật và phương thức fill_color() để điền màu sắc cho hình chữ nhật.

    Thông qua kế thừa từ hai abstract class, chúng ta có thể đảm bảo rằng Rectangle class đã triển khai đầy đủ các phương thức abstract của ShapeColor.

    Bài viết gần đây

    spot_img

    Related Stories

    Leave A Reply

    Please enter your comment!
    Please enter your name here

    Đăng ký nhận thông tin bài viết qua email