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):
passTrong đó, 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(), Rectangle và Circle 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. Cat và Dog 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à Shape và Color, mỗi class đều có một phương thức abstract. Shape có phương thức abstract area() và 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 Shape và Color. 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 Shape và Color.
