Explore all courses in this category.
Explore all courses in this category.
Nguyễn Đình Cường
0 comment
09 Nov, 2026
Class và object là hai khái niệm đầu tiên trong lập trình hướng đối tượng, và cũng là hai thứ người mới hay nhầm lẫn nhất. Hãy nghĩ đơn giản: class là bản vẽ, object là ngôi nhà xây theo bản vẽ đó.
Class (lớp) mô tả một loại thực thể: nó có những thuộc tính nào và làm được những việc gì. Bản thân class chưa phải là một thứ cụ thể, giống như bản vẽ không phải là căn nhà. Bạn có thể dựng nhiều căn nhà từ một bản vẽ, mỗi căn có màu sơn riêng.
class SinhVien:
truong = "Đại học ABC" # thuộc tính chung của lớp
def __init__(self, ten, diem): # hàm khởi tạo
self.ten = ten # thuộc tính riêng
self.diem = diem
def gioi_thieu(self):
return f"{self.ten} - điểm {self.diem}"Object (đối tượng, hay instance) được tạo ra từ class bằng cách gọi tên lớp như một hàm:
sv1 = SinhVien("An", 8.5)
sv2 = SinhVien("Bình", 7.0)
print(sv1.gioi_thieu()) # An - điểm 8.5
print(sv2.gioi_thieu()) # Bình - điểm 7.0
sv2.diem = 9.0 # sửa riêng sv2, sv1 không đổiMỗi object có dữ liệu riêng, nhưng dùng chung các phương thức do class định nghĩa. Thay đổi sv2 không ảnh hưởng sv1.
Constructor (hàm khởi tạo) là hàm đặc biệt chạy ngay khi object được tạo, dùng để gán giá trị ban đầu. Trong Python tên là __init__, trong Java và C# trùng tên lớp, trong JavaScript là constructor.
Từ khóa self (Python) hay this (Java, C#, JavaScript) trỏ tới chính object đang được thao tác. Nhờ nó mà phương thức biết đang làm việc với dữ liệu của object nào. Trong Python, bạn phải viết self là tham số đầu tiên của mỗi phương thức.
gioi_thieu().Ví dụ trong game: lớp Quai có thuộc tính mau, vi_tri và phương thức di_chuyen(), tan_cong(). Mỗi con quái trên màn hình là một object riêng.
class GioHang:
def __init__(self):
self.mon = []
def them(self, ten, gia, so_luong=1):
self.mon.append({"ten": ten, "gia": gia, "sl": so_luong})
def tong_tien(self):
return sum(m["gia"] * m["sl"] for m in self.mon)
gio = GioHang()
gio.them("Bút", 5000, 4)
gio.them("Vở", 12000, 2)
print(gio.tong_tien()) # 44000Dữ liệu (danh sách món) và hành vi (thêm, tính tổng) nằm cùng chỗ, nên dễ hiểu và dễ bảo trì hơn nhiều so với biến rải rác khắp chương trình.
self. khi gán thuộc tính, khiến giá trị chỉ là biến cục bộ và biến mất sau khi hàm kết thúc.def __init__(self, ds=[]); mọi object sẽ chia sẻ cùng một danh sách. Hãy dùng None rồi tạo danh sách mới bên trong.SinhVien.gioi_thieu() thay vì sv1.gioi_thieu().Python cho phép lớp của bạn "hòa nhập" vào ngôn ngữ nhờ các phương thức có dạng __tên__. Hai phương thức hữu ích nhất cho người mới:
class Diem:
def __init__(self, x, y):
self.x, self.y = x, y
def __str__(self):
return f"({self.x}, {self.y})"
def __eq__(self, other):
return self.x == other.x and self.y == other.y
def __add__(self, other):
return Diem(self.x + other.x, self.y + other.y)
a, b = Diem(1, 2), Diem(3, 4)
print(a + b) # (4, 6)
print(a == Diem(1, 2)) # True__str__ quyết định cách in đối tượng, __eq__ định nghĩa phép so sánh bằng, __add__ cho phép dùng dấu +. Nếu không định nghĩa __str__, in đối tượng sẽ ra một dòng khó đọc kiểu địa chỉ bộ nhớ. Bài tập: tạo lớp PhanSo có cộng, nhân và tự rút gọn.
Tên lớp là danh từ viết hoa chữ cái đầu (GioHang), tên phương thức là động từ (them, tinh_tong). Mỗi lớp nên làm một việc: nếu lớp vừa lo dữ liệu, vừa in ra màn hình, vừa lưu file, hãy tách nó thành nhiều lớp nhỏ.
Class là bản thiết kế, object là thực thể sinh ra từ đó. Khi đã nắm vững sự khác biệt này cùng constructor và self, bạn đã sẵn sàng học kế thừa và đa hình. Hãy thử mô hình hóa những thứ quen thuộc quanh bạn như xe máy, thư viện, tài khoản ngân hàng bằng các lớp riêng.
Bạn có thể tiếp tục hành trình với những khóa học lập trình trên codebem.com, học theo tốc độ của riêng mình.
Nguyễn Đình Cường
0 comment