🎯 Mục Tiêu
- Thoát khỏi tư duy viết Code thủ công từ trên xuống dưới (Procedural Programming).
- Áp dụng thế giới quan thực tế vào Code: Mọi thứ đều là Đối Tượng (OOP – Object Oriented Programming).
- Nắm vững khái niệm về
Class(Bản thiết kế) vàObject(Sản phẩm làm ra). - Hiểu được chữ
selflà gì và tại sao Python cứ bắt nhét vào Hàm khởi tạo__init__.
Tư Duy OOP Là Gì?
Thay vì viết một mớ các Hàm rời rạc và các Biến lộn xộn, OOP bắt bạn Gom nhóm lại:
- Thông tin (Biến): Tên đồ vật, màu sắc, tuổi thọ… Bị ép đổi tên gọi là Thuộc Tính (Attributes).
- Hành động (Hàm): Chạy, nhảy, sủa, login… Bị ép đổi tên gọi là Phương Thức (Methods).
Class và Object (Bản Vẽ và Thực Thể)
- Class (Lớp): Giống như một tờ bản vẽ chế tạo Xe Hơi. Chứa quy định “Xe phải có 4 bánh, có vô lăng”. Bản vẽ thì KHÔNG THỂ CẦM LÁI CHẠY ĐƯỢC.
- Object (Đối Tượng): Bạn đem bản vẽ đó ra xưởng, đúc thành 1 chiếc Xe màu Đỏ, và đúc chiếc thứ 2 màu Xanh. Cả 2 chiếc này gọi là Objects (Thực thể), có thể lấy ra chạy thực sự ở ngoài đời!
Vận Hành Xưởng Đúc: Hàm Khởi Tạo __init__
Hàm “Init” (Initialize) là một Hàm Ma Thuật của Python. Cứ MỖI LẦN bạn đúc ra 1 ĐỐI TƯỢNG MỚI, Hàm này TỰ ĐỘNG CHẠY ngay lập tức để Setup Cấu hình khởi điểm cho đối tượng đó.
# Lập Bản Thiết Kế (Class). Chữ cái đầu tiên phải VIẾT HOA theo chuẩn.
class Dog:
# Hàm khởi tạo mặc định.
def __init__(self, ten_giao, giong_loai):
# Thiết lập Thuộc Tính cho đối tượng
self.name = ten_giao
self.breed = giong_loai
# Tạo một Phương Thức (Hành động)
def bark(self):
print(f"Bé {self.name} sủa: Gâu Gâu!!")
# Ra lệnh Đúc đối tượng số 1
cho_cua_toi = Dog("Lu", "Golden")
# Ra lệnh Đúc đối tượng số 2
cho_cua_ban = Dog("Mực", "Corgi")
# Gọi hành động cho đối tượng 1
cho_cua_toi.bark() # In ra: Bé Lu sủa: Gâu Gâu
Huyền Cơ Xoay Quanh Chữ self
Tại sao trong Class lúc nào cũng bắt chèn chữ self vào đầu ngoặc các Hàm? self có nghĩa là “Bản Thân Tôi”. Khi bạn có 1 triệu con Chó được sinh ra từ cùng 1 Class Dog. Nếu 1 con sủa bậy, làm sao Class biết ĐỨA NÀO VỪA SỦA? -> Chữ self chính là Sợi Dây Tiêm vào hàm để đại diện cho Từng Đối Tượng cụ thể. Khi con Lu sủa, self sẽ biến gầm thành Lu.
Class Attribute vs Instance Attribute
Có những Thông Tin là Độc Quyền của từng thằng, nhưng cũng có Thông tin là Quy Luật chung của cả Loài.
class NhanVien:
# CLASS ATTRIBUTES (Biến Toàn Cục Trụ Sở): Áp dụng bắt buộc cho TỐT CẢ nhân viên
ten_cong_ty = "Google"
def __init__(self, ten_giao, luong_thang):
# INSTANCE ATTRIBUTES (Biến Bản Thân): Khúc này mỗi người khác nhau
self.name = ten_giao
self.salary = luong_thang
# Test:
nv1 = NhanVien("An", 500)
nv2 = NhanVien("Bình", 800)
print(nv1.ten_cong_ty) # Vẫn ra Google
💡 Key Takeaways
- Code không OOP sẽ sớm nổ tung khi quy mô Công ty phình to. OOP là chuẩn mực xin việc.
- Cứ khai báo Class thì chữ cái đầu Viết Hoa (
UserAccount, không phảiuserAccount). - Mọi hàm định nghĩa bên trong Class (Methods) ĐỀU PHẢI có chữ
selfngồi chình ình ở vị trí đối số đầu tiên, nếu không Python sẽ quăng lỗi Parameter.
➡️ Bài Tiếp Theo Lesson 18 – Inheritance (Kế Thừa)

