Lesson 17: Lập Trình Hướng Đối Tượng (Classes & Objects)

🎯 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ữ self là 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ải userAccount).
  • Mọi hàm định nghĩa bên trong Class (Methods) ĐỀU PHẢI có chữ self ngồ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)

✍️ Bài tập thực hành

Bài 1: Tạo một Class tên là 'Car'
- Thuộc tính: 'brand' (nhãn hiệu), 'model' (mẫu xe), 'year' (năm sản xuất)
- Phương thức: 'display_info()' in ra thông tin chi tiết của xe.

Leave a Reply

Your email address will not be published. Required fields are marked *