Kỹ thuật lập trình Python
Kiểu dữ liệu
Literal
Literal là một tính năng được cung cấp bởi module typing (hoặc typing_extensions nếu bạn dùng Pyt...
TypedDict
TypedDict là một lớp đặc biệt trong module typing (hoặc typing_extensions cho Python < 3.8), cho ...
Enum
Enum là một kiểu dữ liệu cho phép bạn định nghĩa tập hợp các hằng số có tên. Mỗi giá trị trong en...
Union (hoặc | từ Python 3.10+)
Union cho phép một biến hoặc một tham số có thể có nhiều kiểu giá trị. Nó đến từ module typing, ...
Optional
Giống như Union[X, None], dùng cho giá trị có thể bị bỏ qua: from typing import Optional def ...
Any
Biến có thể là bất kỳ kiểu gì – dùng khi không thể đoán trước kiểu hoặc muốn bỏ qua kiểm tra: fr...
Callable
Trong Python, Callable là một kiểu dữ liệu đặc biệt dùng để đại diện cho một hàm (function) hoặc ...
Annotated
Dùng để thêm metadata cho type (hữu ích với Pydantic hoặc FastAPI): from typing import Annotated...
NewType
Tạo kiểu mới dựa trên kiểu cũ, nhưng giúp rõ ràng hơn về mặt ngữ nghĩa: from typing import NewTy...
Final
Dùng để đánh dấu rằng biến hoặc class không nên bị ghi đè hoặc kế thừa: from typing import Final...
Self (Python 3.11+)
Cho phép annotate chính class đang được định nghĩa: class Counter: def increment(self) -> S...
Generic
Generics cho phép bạn xác định kiểu dữ liệu một cách tổng quát, giúp viết code linh hoạt và an to...
Một số kỹ thuật hay dùng
Monkey patch
Monkey patch là kỹ thuật thay đổi hoặc mở rộng hành vi của một hàm, method, class, hoặc module tạ...
Monkey patch phù hợp từng trường hợp trong Django
I. Monkey patch một model method Ví dụ: bạn muốn override method save của User model trong Djang...
Decorator – Gói thêm chức năng cho hàm
Decorator là một khái niệm cực kỳ mạnh mẽ và phổ biến trong Python – đặc biệt khi bạn muốn gói th...
Annotated
Annotated trong Python là cách để gắn thêm thông tin (metadata) vào một kiểu dữ liệu. Cú pháp: ...
Context Manager (with) – Quản lý tài nguyên
Dùng để xử lý logic mở/đóng tự động: file, kết nối, khóa, transaction... with open("file.txt", "...
Metaclass – Tùy biến hành vi của class
Metaclass cho phép bạn thay đổi cách class được tạo ra. class Meta(type): def __new__(cls, ...
Dynamic import (runtime import)
Giúp bạn import module hoặc class dựa theo tên chuỗi, rất mạnh khi viết plugin hoặc hệ thống mở r...
Signal/Event Hooks
Frappe/Django dùng signal để gọi logic khi có sự kiện xảy ra. from frappe.model.document import ...
Strategy Pattern với Dictionary
Dùng dict để map các hàm theo key, tiện xử lý logic thay vì if-elif dài dòng: def add(x, y): ret...
Caching / Memoization
Dùng để lưu kết quả tạm để tránh tính toán lại: from functools import lru_cache @lru_cache(ma...
Metadata
Metadata nghĩa là "dữ liệu về dữ liệu" — tức là thông tin mô tả về một dữ liệu nào đó. Hay nói c...
lambda
lambda trong Python là một hàm ẩn danh (anonymous function) – tức là một hàm không cần đặt tên. ...
functools
functools là một module chuẩn trong Python, cung cấp các công cụ giúp thao tác và cải tiến hàm – ...
MyPy
MyPy là một trình kiểm tra kiểu tĩnh (static type checker) cho ngôn ngữ lập trình Python. Mặc dù ...
yield
yield là một từ khóa trong Python, dùng để tạm dừng một hàm và trả về một giá trị, nhưng không kế...
yeild nâng cao
yield nâng cao – tức là những cách dùng yield ở mức cao hơn, như: yield như kênh giao tiếp 2...
Kỹ thuật hay và gọn gàng khi thao tác với danh sách (list)
1. List Comprehension – Viết gọn vòng lặp trong danh sách Cơ bản: numbers = [1, 2, 3, 4, 5] sq...
Pydantic
Pydantic là một thư viện Python dùng để: Tạo các class dữ liệu kiểu an toàn (type-safe) ...
Dataclass
dataclass là một decorator được thêm vào từ Python 3.7 trong module dataclasses. Nó giúp bạn tự đ...
defaultdict
defaultdict là một lớp trong module collections, giống như dict, nhưng khi bạn truy cập một key k...