Python không dùng dấu gạch dưới như “công cụ kiểm soát truy cập”

Hiểu lầm phổ biến
Mình vẫn thấy nhiều người đối xử với “dấu gạch dưới” trong Python như thể nó là “bộ kiểm soát truy cập” (access modifiers). Điều này dẫn đến lỗi rối rắm và code thì không thực sự private.
Nói thẳng luôn: Python không ép buộc kiểm soát truy cập theo kiểu Java hay C#. Không có rào chắn thật sự giữa private / protected / public. Thay vào đó, dấu gạch dưới chủ yếu là tín hiệu đặt tên.
Dấu gạch dưới đơn: 'Không dành cho bạn'
Khi bạn viết _helper(self):, đây là gợi ý mạnh mẽ rằng method này dùng nội bộ. Python không cấm bạn gọi nó (u._helper()), nhưng đây là một quy ước bạn nên tôn trọng.
Dấu gạch dưới đôi: Name Mangling
Khi bạn viết __secret(self):, Python thực hiện name mangling, biến đổi tên thuộc tính thành _User__secret. Nó khó truy cập hơn, nhưng hoàn toàn không bị chặn!
Vậy nên làm gì thay thế?
Hãy dùng dấu gạch dưới để nói đúng sự thật về cách bạn mong code sẽ được sử dụng:
_name: Thuộc nhóm nội bộ-ish; đừng dựa vào nếu bạn không thật sự muốn__name: Tránh collision nhờ mangling; vẫn không phải private đúng nghĩa- Không có dấu gạch dưới: Dành cho dùng bình thường!
Mẹo nhỏ (Pro Tip)
Thay vì tự hỏi “làm sao để biến thứ này thành private?”, hãy hỏi: “Đây là một tính năng API ổn định, hay chỉ là chi tiết triển khai mà sau này mình có thể đổi?”. Thay đổi tư duy này sẽ giúp bạn code dễ dàng hơn rất nhiều.
Free In-Browser Developer Tools
Clean AI CLI logs, build cron expressions, decode JWTs, and calculate chmod permissions offline.
Related Articles

Kho dữ liệu phân tích Serverless với BigQuery & Cloud Run: Từ luồng GA4 đến cảnh báo SEO tự động
Tìm hiểu cách xây dựng kho dữ liệu phân tích serverless tự động với BigQuery, Google Analytics 4 và Cloud Run: mô hình hóa lược đồ, chuyển đổi SQL theo lịch trình, chi phí không tải và cảnh báo truy vấn SEO tự động.
Read more
BigQuery + Cloud Run: Xây Dựng Pipeline Nhập Dữ Liệu Serverless Cho Production
Cẩm nang cấp production về nhập dữ liệu serverless trên Google Cloud: BigQuery Storage Write API, chiến lược phân vùng và phân cụm, bộ nhận FastAPI async trên Cloud Run, Terraform đầy đủ, phân tích chi phí thực tế, và những chế độ lỗi gọi bạn lúc 3 giờ sáng.
Read moreFastAPI vs Litestar: So sánh Benchmark Production và Kiến trúc Microservice Thông lượng Cao
Một bài so sánh khách quan, dựa trên benchmark giữa FastAPI và Litestar. Khám phá hiệu năng ASGI, kiến trúc dependency injection, tốc độ serialization, và typing cho OpenAPI.
Read more