Câu 1Câu nào sau đây thể hiện rõ nhất vấn đề mà class OOP giải quyết?
Tổng kết Python OOP — Gói dữ liệu và hành vi vào trong class
Bản tổng kết Python OOP. Bao quát cấu trúc cơ bản của class, kế thừa và đa hình, special method (dunder), câu lệnh with, đóng gói, và type hints xuyên suốt cả series.
OOP gói dữ liệu và hành vi vào một đơn vị duy nhất
Trong Cú pháp Python, bạn đã nắm được các viên gạch như if, for, và def. Python OOP xếp lên trên đó bằng cách gói dữ liệu (thuộc tính) và hành vi (method) vào một class duy nhất.
So với code thủ tục giữ biến và hàm tách rời, kết hợp dữ liệu với logic xử lý nó giúp code dễ đọc khi hệ thống lớn lên.
Cấu trúc cơ bản của class — Định nghĩa, thuộc tính, method
Một class được dựng từ bốn mảnh sau:
- Từ khóa
classđịnh nghĩa kiểu (= bản thiết kế) __init__khởi tạo từng instance (= vật thật)selfmang trạng thái cho từng instance (thuộc tính)- Các loại method (instance / class / static) chia tách hành vi
Giữ trong đầu sự ánh xạ class = bản thiết kế, instance = vật thật thì phần còn lại tự khớp.
| Phân loại | Khái niệm | Dùng ở đâu |
|---|---|---|
| Định nghĩa | Class và Instance | Gói dữ liệu + hành vi lại với nhau; sinh ra nhiều vật thật từ một bản thiết kế |
| Khởi tạo | Constructor __init__ / Destructor __del__ | Đặt thuộc tính bắt buộc khi tạo; dọn dẹp khi hủy |
| Thuộc tính | Class variable vs Instance variable | Phân biệt giá trị chia sẻ cho tất cả với giá trị riêng từng instance |
| Method | Instance / Class / Static | Chia trách nhiệm (thao tác instance / thao tác kiểu / hàm thuần) qua self / cls / không có đối số |
Kết nối các class — Kế thừa và Đa hình
Kết hợp kế thừa (tái sử dụng class cha), đa kế thừa (trộn nhiều cha), và đa hình (cùng interface, hành vi khác nhau) thì bạn có thể giảm trùng lặp mà vẫn giữ thiết kế linh hoạt. Khi các nhánh if type(...) bắt đầu chất đống ở phía gọi, hãy với tới đa hình.
| Phân loại | Khái niệm | Dùng ở đâu |
|---|---|---|
| Kế thừa | class Child(Parent) và super() | Tái sử dụng thuộc tính và method của cha trong con; override để chỉnh theo từng trường hợp |
| Đa kế thừa | Nhiều cha và MRO | Kết hợp tính năng từ nhiều cha (mẫu mixin). Method cùng tên đi theo thứ tự ưu tiên MRO |
| Đa hình | Đa hình | Cùng tên method, hành vi khác theo kiểu — xóa các nhánh `if type(...)` ở bên gọi |
Thiết kế class kiểu Python — Special method, with, và Type Hints
Bằng cách triển khai dunder method (special method tên dạng __like_this__), class của bạn cắm thẳng vào các tính năng ngôn ngữ Python như toán tử +, print(), và câu lệnh with. Xếp thêm các quy ước đóng gói (_x / __x / @property) và type hints thì khả năng bảo trì và độ dễ đọc tăng vọt.
| Phân loại | Khái niệm | Dùng ở đâu |
|---|---|---|
| Special method | __add__ / __str__ / __eq__ v.v. | Dạy cho `+`, `print`, và `==` cách class của bạn hành xử; tích hợp với cú pháp Python |
| Đóng gói | _x và __x, @property / @setter | Thu hẹp những gì có thể với tới từ bên ngoài; validate bên trong setter |
| Context manager | with và __enter__ / __exit__ | Xây dựng cơ chế giành/giải phóng đáng tin cho resource (file, DB, lock) vào class của bạn |
| with trong thực tế | File I/O với open() | Use case kinh điển của with — chống rò rỉ close() và các tình huống biên khi có exception |
| Type hints | Ký pháp : int -> str | Ghi rõ kiểu của đối số / giá trị trả về / thuộc tính; nhận kiểm tra tĩnh từ IDE và mypy |
Đi tiếp — Dự án thật
Tiếp theo, hãy bắt tay vào các thiết lập dự án thật được dựng từ nhiều file và nhiều module, và tiếp cận các thư viện hữu ích để tựa vào.
Kiểm tra kiến thức
Hãy trả lời từng câu hỏi một.
Câu 2Vấn đề kinh điển mà đa hình giải quyết là gì?
Câu 3Bạn cần triển khai những method nào để class của mình dùng được với câu lệnh with, kiểu with my_obj:?