Sunday, January 19, 2025

[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.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories