Các lớp trừu tượng trong Python
Category: Python
Trong Python, lớp trừu tượng là lớp không thể tự khởi tạo và được thiết kế để trở thành bản thiết kế cho các lớp khác. Lớp trừu tượng cho phép chúng ta định nghĩa các phương thức phải được các lớp con triển khai, đảm bảo giao diện nhất quán trong khi vẫn cho phép các lớp con cung cấp các triển khai cụ thể.
Các lớp cơ sở trừu tượng trong Python
Nó định nghĩa các phương thức phải được triển khai bởi các lớp con của nó, đảm bảo rằng các lớp con tuân theo một cấu trúc nhất quán. ABC cho phép bạn định nghĩa các giao diện chung mà nhiều lớp con khác nhau có thể triển khai trong khi vẫn áp dụng một mức độ trừu tượng.
Python cung cấp mô-đun abc để định nghĩa ABC và thực thi việc triển khai các phương thức trừu tượng trong các lớp con.
Ví dụ:
from abc import ABC, abstractmethod
# Định nghĩa một lớp trừu tượng
class Animal(ABC): # Animal kế thừa từ ABC (Abstract Base Class - lớp cơ sở trừu tượng)
@abstractmethod
def sound(self):
pass # Đây là một phương thức trừu tượng, không có phần triển khai.
# Lớp con cụ thể kế thừa từ Animal
class Dog(Animal):
def sound(self):
return "Bark" # Cung cấp phần triển khai cho phương thức trừu tượng
# Tạo một đối tượng Dog
dog = Dog()
print(dog.sound()) # Kết quả: Bark
Giải thích mã:
Abstract Base Class: Animal là một lớp trừu tượng kế thừa từ ABC (Abstract Base Class). Lớp này không thể được khởi tạo trực tiếp vì nó chứa một phương thức trừu tượng sound(). Decorator @abstractmethod được sử dụng để đánh dấu sound() là một phương thức trừu tượng. Điều này có nghĩa là bất kỳ lớp con nào cũng phải triển khai phương thức này để được khởi tạo.
Concrete Subclass: Dog là một subclass của Animal cung cấp một triển khai cho phương thức sound(). Điều này cho phép lớp Dog được khởi tạo và sử dụng.
Khởi tạo: Chúng ta tạo một thể hiện của Dog và gọi phương thức sound(), phương thức này trả về "Bark".
Các thành phần chính của một lớp trừu tượng là:
Mục lục
Các lớp cơ sở trừu tượng trong Python
Phương pháp trừu tượng
Phương pháp cụ thể
Thuộc tính trừu tượng
Khởi tạo lớp trừu tượng
Phương pháp trừu tượng
Phương thức trừu tượng là phương thức được định nghĩa trong lớp trừu tượng nhưng không có triển khai. Chúng đóng vai trò là bản thiết kế cho các lớp con, đảm bảo rằng chúng cung cấp triển khai riêng của mình.
Ví dụ:
from abc import ABC, abstractmethod
class Animal(ABC):
@abstractmethod
def make_sound(self):
pass # Phương pháp trừu tượng, không có triển khai ở đây
Giải thích:
make_sound() là một phương thức trừu tượng trong lớp Animal, do đó không có bất kỳ mã nào bên trong nó.
Phương pháp cụ thể
Phương thức cụ thể là phương thức có triển khai đầy đủ trong lớp trừu tượng. Các phương thức này có thể được kế thừa bởi các lớp con và sử dụng trực tiếp mà không cần phải định nghĩa lại.
Ví dụ:
from abc import ABC, abstractmethod
class Animal(ABC):
@abstractmethod
def make_sound(self):
pass # Phương thức trừu tượng, được triển khai bởi các lớp con
def move(self):
return "Moving" # Phương pháp cụ thể với triển khai
Giải thích:
Phương thức move() là một phương thức cụ thể trong lớp Animal. Phương thức này được triển khai và không cần phải bị ghi đè bởi lớp Dog.
Thuộc tính trừu tượng
Thuộc tính trừu tượng hoạt động giống như phương thức trừu tượng nhưng được sử dụng cho các thuộc tính. Các thuộc tính này được khai báo bằng @property trình trang trí và được đánh dấu là trừu tượng bằng cách sử dụng @abstractmethod. Các lớp con phải triển khai các thuộc tính này.
Ví dụ:
from abc import ABC, abstractmethod
class Animal(ABC):
@property
@abstractmethod
def species(self):
pass # Thuộc tính trừu tượng, phải được triển khai bởi các lớp con
class Dog(Animal):
@property
def species(self):
return "Canine"
# Khởi tạo lớp con cụ thể
dog = Dog()
print(dog.species)
Giải thích:
loài là một thuộc tính trừu tượng trong lớp Động vật và được đánh dấu là @abstractmethod.
Lớp Dog triển khai thuộc tính species, biến nó thành một lớp con cụ thể có thể được khởi tạo.
Thuộc tính trừu tượng yêu cầu một lớp con phải cung cấp phần triển khai của thuộc tính đó.
Khởi tạo lớp trừu tượng
Không thể khởi tạo trực tiếp các lớp trừu tượng. Điều này là do chúng chứa một hoặc nhiều phương thức hoặc thuộc tính trừu tượng không có triển khai. Việc cố gắng khởi tạo một lớp trừu tượng sẽ dẫn đến lỗi TypeError.
Ví dụ:
from abc import ABC, abstractmethod
class Animal(ABC):
@abstractmethod
def make_sound(self):
pass
# Đang cố gắng khởi tạo lớp trừu tượng trực tiếp
# Điều này sẽ gây ra lỗi:
# animal = Animal() # TypeError: Không thể khởi tạo lớp trừu tượng Animal bằng các phương thức trừu tượng make_sound
Giải thích:
Lớp Animal là trừu tượng vì nó có phương thức make_sound() là một phương thức trừu tượng.
Nếu bạn cố gắng khởi tạo trực tiếp Animal (ví dụ: animal = Animal()), Python sẽ đưa ra lỗi TypeError vì bạn không thể khởi tạo một lớp có phương thức trừu tượng chưa được triển khai.
Chỉ những lớp con triển khai tất cả các phương thức trừu tượng mới có thể được khởi tạo.
Published on Jun 20, 2025