Chào bạn! Nếu bạn từng bối rối không biết khi nào nên dùng self, khi nào dùng @classmethod, hay tại sao có những hàm chẳng cần dùng gì cả, thì bài viết này dành cho bạn.
Trong Python, một Class không chỉ đơn thuần là "chứa" hàm. Nó chia các hàm (phương thức) thành 3 loại "anh em" với vai trò riêng biệt. Hãy cùng bóc tách chúng nhé!
1. Instance Method (Phương thức đối tượng) - "Kẻ làm thuê chăm chỉ"
Đây là loại phương thức phổ biến nhất. Nó gắn liền với một đối tượng cụ thể được tạo ra từ class.
Dấu hiệu nhận biết: Luôn có tham số đầu tiên là
self.Sức mạnh: Nó có thể truy cập và thay đổi dữ liệu riêng của từng đối tượng.
class Burger:
def __init__(self, name):
self.name = name
# Đây là Instance Method
def introduce(self):
print(f"Tôi là một chiếc Burger {self.name}!")
# Sử dụng
my_burger = Burger("Bò Phô Mai")
my_burger.introduce()
Ghi nhớ: Dùng Instance Method khi bạn cần làm gì đó liên quan đến dữ liệu riêng của từng "đối tượng" (như tên, tuổi, màu sắc riêng).2. Class Method (Phương thức lớp) - "Quản lý kho hàng"
Thay vì làm việc với từng đối tượng lẻ tẻ, Class Method làm việc với toàn bộ cái khuôn (Class).
Dấu hiệu nhận biết: Có decorator
@classmethodở trên và tham số đầu tiên làcls.Sức mạnh: Thường dùng để thay đổi trạng thái chung của cả Class hoặc dùng để tạo ra các đối tượng theo cách đặc biệt (Factory Pattern).
class Burger:
price = 50 # Giá chung cho tất cả burger
@classmethod
def update_price(cls, new_price):
cls.price = new_price
print(f"Giá burger mới toàn hệ thống là: {cls.price}k")
# Sử dụng (Gọi trực tiếp từ tên Class, không cần tạo đối tượng)
Burger.update_price(60)
3. Static Method (Phương thức tĩnh) - "Người hàng xóm biết tuốt"
Static Method là những hàm nằm trong Class chứ thực chất nó chẳng liên quan gì đến dữ liệu của Class hay đối tượng cả.
Dấu hiệu nhận biết: Có decorator
@staticmethodvà không có tham sốselfhaycls.Sức mạnh: Dùng để chứa các hàm tiện ích (utility functions) có logic liên quan đến chủ đề của Class nhưng hoạt động độc lập.
class Burger:
@staticmethod
def check_health_tip(is_veggie):
if is_veggie:
return "Lựa chọn tốt cho sức khỏe!"
return "Ngon nhưng đừng ăn quá nhiều nhé!"
# Sử dụng
print(Burger.check_health_tip(True))
Bảng so sánh nhanh
| Đặc điểm | Instance Method | Class Method | Static Method |
| Tham số mặc định | self (đối tượng) | cls (lớp) | Không có |
| Truy cập Instance | Có | Không | Không |
| Truy cập Class | Có | Có | Không |
| Mục đích chính | Thay đổi thuộc tính đối tượng | Thay đổi thuộc tính lớp | Hàm tiện ích bổ trợ |
Tổng kết:
Dùng Instance Method nếu bạn muốn điều khiển "từng cá thể".
Dùng Class Method nếu bạn muốn điều khiển "cả loài".
Dùng Static Method nếu bạn chỉ muốn để một cái hàm vào Class cho gọn gàng, dễ quản lý.
No comments:
Post a Comment