Khai Báo Phương Thức (Method) Và Thuộc Tính (Attribute) Trong Python
Trong lập trình hướng đối tượng (OOP) với Python, thuộc tính (attribute) và phương thức (method) là hai thành phần quan trọng để quản lý dữ liệu và hành vi của đối tượng.

1. Thuộc Tính (Attribute) Là Gì?
Định Nghĩa
Thuộc tính là các biến bên trong một lớp, dùng để lưu trữ thông tin về đối tượng.
Có hai loại thuộc tính:
- Thuộc tính của đối tượng (Instance Attribute): Mỗi đối tượng có giá trị riêng.
- Thuộc tính của lớp (Class Attribute): Dùng chung cho tất cả các đối tượng.
Khai Báo Thuộc Tính Của Đối Tượng
Thuộc tính thường được khai báo trong phương thức __init__()
, sử dụng từ khóa self
:
class Nguoi:
def __init__(self, ten, tuoi):
self.ten = ten # Thuộc tính của đối tượng
self.tuoi = tuoi
# Tạo đối tượng
nguoi1 = Nguoi("An", 25)
nguoi2 = Nguoi("Bình", 30)
# Truy cập thuộc tính
print(nguoi1.ten) # Kết quả: An
print(nguoi2.tuoi) # Kết quả: 30
Mỗi đối tượng có giá trị riêng cho ten
và tuoi
.
Khai Báo Thuộc Tính Của Lớp
Thuộc tính của lớp được khai báo bên ngoài __init__()
và dùng chung cho tất cả các đối tượng:
class HocSinh:
truong = "THPT Quốc Gia" # Thuộc tính của lớp
def __init__(self, ten, lop):
self.ten = ten
self.lop = lop
# Tạo đối tượng
hs1 = HocSinh("Nam", "10A1")
hs2 = HocSinh("Lan", "11B2")
# Truy cập thuộc tính
print(hs1.truong) # Kết quả: THPT Quốc Gia
print(hs2.truong) # Kết quả: THPT Quốc Gia
Thuộc tính truong
được chia sẻ bởi tất cả các đối tượng.
2. Phương Thức (Method) Là Gì?
Định Nghĩa
Phương thức là hàm bên trong lớp, giúp thao tác với thuộc tính của đối tượng.
Có 3 loại phương thức trong Python:
- Phương thức của đối tượng (Instance Method)
- Phương thức của lớp (Class Method)
- Phương thức tĩnh (Static Method)
Phương Thức Của Đối Tượng (Instance Method)
Phương thức này thao tác với thuộc tính của đối tượng.
class Nguoi:
def __init__(self, ten, tuoi):
self.ten = ten
self.tuoi = tuoi
def gioi_thieu(self):
print(f"Tôi tên là {self.ten}, năm nay {self.tuoi} tuổi.")
# Tạo đối tượng
nguoi1 = Nguoi("An", 25)
nguoi1.gioi_thieu() # Kết quả: Tôi tên là An, năm nay 25 tuổi.
Phương thức gioi_thieu()
sử dụng self.ten
và self.tuoi
để in thông tin.
Phương Thức Của Lớp (Class Method)
Phương thức này thao tác với thuộc tính của lớp, không cần truy cập từng đối tượng.
Sử dụng decorator @classmethod
:
class HocSinh:
truong = "THPT Quốc Gia"
def __init__(self, ten):
self.ten = ten
@classmethod
def doi_ten_truong(cls, ten_moi):
cls.truong = ten_moi # Thay đổi thuộc tính của lớp
# Gọi phương thức của lớp
HocSinh.doi_ten_truong("THPT Nguyễn Huệ")
print(HocSinh.truong) # Kết quả: THPT Nguyễn Huệ
Phương Thức Tĩnh (Static Method)
Phương thức tĩnh không liên quan đến cả đối tượng lẫn lớp.
Dùng khi không cần truy cập self
hoặc cls
, chỉ thực hiện tác vụ chung.
class ToanHoc:
@staticmethod
def tinh_tong(a, b):
return a + b
# Gọi phương thức tĩnh
print(ToanHoc.tinh_tong(5, 10)) # Kết quả: 15
3. Ví Dụ Thực Tế: Lớp Car
class Car:
# Thuộc tính của lớp
so_banh = 4
def __init__(self, hang, mau):
self.hang = hang # Thuộc tính của đối tượng
self.mau = mau
# Phương thức của đối tượng
def mo_ta(self):
print(f"Xe {self.hang} màu {self.mau}")
# Phương thức của lớp
@classmethod
def doi_so_banh(cls, so_moi):
cls.so_banh = so_moi
# Phương thức tĩnh
@staticmethod
def kiem_tra_toc_do(toc_do):
return toc_do > 100
# Tạo đối tượng
car1 = Car("Toyota", "Đỏ")
car2 = Car("Honda", "Xanh")
# Gọi phương thức đối tượng
car1.mo_ta() # Xe Toyota màu Đỏ
# Gọi phương thức của lớp
Car.doi_so_banh(6)
print(Car.so_banh) # Kết quả: 6
# Gọi phương thức tĩnh
print(Car.kiem_tra_toc_do(120)) # Kết quả: True
4. Tổng Kết
Thành phần | Giải thích | Ví dụ |
---|---|---|
Thuộc tính của đối tượng | Biến thuộc về mỗi đối tượng, lưu trữ dữ liệu riêng | self.ten, self.tuoi |
Thuộc tính của lớp | Biến dùng chung cho tất cả các đối tượng | cls.truong |
Phương thức của đối tượng | Hàm thao tác với thuộc tính của từng đối tượng | def hien_thi(self) |
Phương thức của lớp | Hàm thao tác với thuộc tính chung của lớp | @classmethod def doi_ten_truong(cls, ten_moi) |
Phương thức tĩnh | Hàm không liên quan đến lớp hay đối tượng | @staticmethod def kiem_tra_toc_do(toc_do) |
Việc hiểu rõ thuộc tính và phương thức giúp bạn lập trình hướng đối tượng hiệu quả hơn trong Python.

Với hơn 10 năm kinh nghiệm lập trình web và từng làm việc với nhiều framework, ngôn ngữ như PHP, JavaScript, React, jQuery, CSS, HTML, CakePHP, Laravel..., tôi hy vọng những kiến thức được chia sẻ tại đây sẽ hữu ích và thiết thực cho các bạn.
Xem thêm

Chào, tôi là Vũ. Đây là blog hướng dẫn lập trình của tôi.
Liên hệ công việc qua email dưới đây.
lhvuctu@gmail.com