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.

4 trụ cột giữ vững OOP
Cấu trúc cơ bảnclass / thuộc tính / methodKế thừa & Đa hìnhclass Child(Parent) + overrideSpecial method__init__ / __str__cắm vào cú pháp PythonĐóng gói & Type hints_x / @property / : int
Bắt đầu từ cấu trúc cơ bản của class, rồi mở rộng theo bốn hướng: kế thừa và đa hình để kết nối các class, special method để cắm vào cú pháp Python, và đóng gói cùng type hints để kết quả an toàn và dễ đọc hơ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)
  • self mang 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ạiKhái niệmDùng ở đâu
Định nghĩaClass và InstanceGó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ạoConstructor __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ínhClass variable vs Instance variablePhân biệt giá trị chia sẻ cho tất cả với giá trị riêng từng instance
MethodInstance / Class / StaticChia 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.

Kế thừa từ cha, override theo từng con để có đa hình
Animal (cha)speak()Dog (con)speak() = WoofCat (con)speak() = MeowBird (con)speak() = Tweetkế thừakế thừakế thừa
Mỗi class con override interface chung (ví dụ method speak) đã được định nghĩa ở cha. Bên gọi không cần biết class con cụ thể — gọi cùng tên method kích hoạt hành vi khác nhau theo từng kiểu.
Phân loạiKhái niệmDùng ở đâu
Kế thừaclass 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ừaNhiều cha và MROKế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ìnhCù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)type hints thì khả năng bảo trì và độ dễ đọc tăng vọt.

Phân loạiKhái niệmDù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 / @setterThu hẹp những gì có thể với tới từ bên ngoài; validate bên trong setter
Context managerwith 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 hintsKý pháp : int -> strGhi 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.

Bản đồ học Python tổng quan
Python cơ bảnChọn kiểuCú pháp PythonXây dựng logicPython OOPDữ liệu + hành viở cùng một chỗDự án thậtDùng framework← Bạn ở đâyTiếp theodựng trêndựng trêndựng trên
Xếp các tầng — Cơ bản → Cú pháp → OOP từ trên xuống dưới. Series này đã bao quát tầng dưới cùng, OOP. Tiếp theo là đưa các nền tảng này vào dự án thật và framework.
QUIZ

Kiểm tra kiến thức

Hãy trả lời từng câu hỏi một.

Câu 1Câu nào sau đây thể hiện rõ nhất vấn đề mà class OOP giải quyế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:?