Python Naming Conventions

Python Naming Conventions for Clean, Professional Code (PEP 8 + Real‑World Guide)

Quy tắc Đặt tên trong Python cho Code Sạch và Chuyên nghiệp (PEP 8 + Hướng dẫn Thực tế)

Đối tượng: Kỹ sư AI từ Junior → Senior, đội ngũ data/ML, backend & tooling.
Mục tiêu: Một hướng dẫn thực tiễn, có quan điểm rõ ràng, mở rộng hơn PEP 8—bao gồm Python hiện đại (3.12+), typing, test, FastAPI, dataclass, và các pattern dự án AI phổ biến.

0) Tóm tắt Nhanh (Cheat Sheet)

Thành phần Quy tắc Ví dụ Ghi chú
Package/Folder snake_case vector_store/, data_prep/ Không dùng chữ hoa hoặc dấu gạch ngang; folder thành module khi có __init__.py.
Module (file) snake_case.py embedding_service.py Ngắn gọn, có ý nghĩa; ưu tiên danh từ.
Class PascalCase EmbeddingService, VectorStore Danh từ; tránh viết tắt trừ khi chuẩn công nghiệp (VD: HTTPClient).
Exception PascalCaseError ValidationError, RateLimitError Luôn kết thúc bằng Error.
Function/Method snake_case() generate_embedding(), to_json() Động từ; tránh quá dài; rõ ràng.
Variable/Attribute snake_case user_id, embedding_dim Ngắn gọn nhưng đủ nghĩa.
Constant ALL_CAPS MAX_TOKENS, DEFAULT_TIMEOUT Chỉ dùng ở module‑level.
Private (convention) _dấu_gạch_dưới_đầu _cache, _normalize() Ngụ ý: chỉ dùng nội bộ.
Name‑mangled __2_gạch_dưới __state Dùng để tránh override ngoài ý muốn khi kế thừa.
Dunder __magic__ __init__, __repr__, __call__ Python dành riêng.
TypeVar / NewType CapWords T, KT, UserId = NewType(“UserId”, int) Dùng chữ cái ngắn; alias kiểu dữ liệu thì PascalCase.
Test Modules test_*.py test_embedding_service.py pytest tìm dựa trên prefix test_.
Fixtures snake_case client, db_session Rõ ràng phạm vi: session, module, function.
FastAPI Routers File snake_case; router = APIRouter() routes/users.py/users API function: get_users(), create_user().
Enum PascalCase + ALL_CAPS members class Role(Enum): ADMIN = “admin” Các thành viên là hằng số.
DataClass / Pydantic Class PascalCase; field snake_case class User(BaseModel): user_id: int JSON nên dễ đọc; alias nếu cần camelCase.
Logging Logger theo module path logger = logging.getLogger(__name__) Không hardcode tên.
Alembic Migration snake_case + id 20240910_add_user_index.py Có id + mô tả ngắn.

1) Tại sao đặt tên quan trọng (đặc biệt trong dự án AI)

  • Truyền tải ý định: đọc là hiểu ngay thiết kế.
  • Giảm bug: phân tách rõ config, service, adapter, domain model.
  • Thân thiện công cụ: lint (ruff), type checker (mypy), formatter (black).
  • Refactor an toàn: tên tốt giúp giữ contract ổn định.

Nguyên tắc vàng: Đặt tên theo cái nó **là* (danh từ) hoặc cái nó làm (động từ). Tránh mô tả cách nó làm.*

2) Module, Package, và Layout Dự án

  • Folder: snake_casecore/, api/, services/.
  • Module: file snake_case.pyretrieval_pipeline.py.
  • Tránh folder mơ hồ kiểu utils/.

3) Class, Exception, Data Model

  • Class: PascalCase → UserService, EmbeddingService.
  • Exception: PascalCase + ErrorInvalidPromptError.
  • Data model: Class PascalCase, field snake_case.

class Document(BaseModel):

    doc_id: str

    content: str

4) Function, Method, Parameter

  • Function/method: snake_case → fetch_user().
  • Boolean: prefix is_, has_, should_.
  • Parameter: đặt rõ ràng, keyword‑only khi cần.

5) Variable, Constant, Scope

  • Variable: snake_case → retry_count.
  • Constant: ALL_CAPS → MAX_RETRIES.
  • _dấu_gạch_dưới: biến nội bộ.
  • __mangled: tránh ghi đè khi kế thừa.

6) Typing & Generics

  • TypeVar: chữ ngắn → T, KT.
  • Alias: PascalCase → JsonDict.
  • NewType: PascalCase → UserId = NewType(“UserId”, int).

7) FastAPI, SQLAlchemy, PyTest

  • FastAPI: route file routes/users.py; schema UserCreate, UserOut.
  • SQLAlchemy: model PascalCase (User), table snake_case (user).
  • PyTest: test file test_*.py, test function test_<case>__<expect>().

8) Docstring & Comment

  • Viết ở thì mệnh lệnh: “Return…”, “Validate…”.
  • Dòng đầu ≤80 ký tự; thêm ví dụ nếu cần.
  • Comment giải thích tại sao, không lặp lại code.

9) Lỗi Thường gặp (Anti‑Pattern)

  • Tên mơ hồ: data, tmp, stuff.
  • Tên quá dài: calculate_similarity_score_for_input_candidate_list_v2().
  • Viết tắt khó hiểu: cfg, svc.
  • Version trong tên: model_final_v2 → dùng Git/Changelog.

10) Checklist Review Trước khi Merge PR

  • Folder/file: snake_case.
  • Class/Exception: PascalCase + Error.
  • Function/Var: snake_case.
  • Constant: ALL_CAPS.
  • Không tên mơ hồ (util, misc).
  • Logger: logging.getLogger(__name__).
  • Test: test_*.py, tên rõ ràng.

11) Kết luận

Đặt tên thống nhất là cách rẻ nhất để nâng chất lượng codebase. Hãy luyện thói quen với pre‑commit + ruff, dùng checklist trước mỗi PR, và giữ tên tập trung vào ý định. Team bạn (và chính bạn trong tương lai) sẽ biết ơn điều đó.

Top bài viết trong tháng

Lên đầu trang

FORM ỨNG TUYỂN

Click or drag a file to this area to upload.
File đính kèm định dạng .docs/.pdf/ và nhỏ hơn 5MB