•2 min read

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

Python không dùng dấu gạch dưới như “công cụ kiểm soát truy cập”
Audio Briefing
0:00 / 0:00
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.

Share this article:

Stay Updated

Get the latest posts delivered straight to your inbox.

Free Developer Utilities

Free In-Browser Developer Tools

Clean AI CLI logs, build cron expressions, decode JWTs, and calculate chmod permissions offline.

Explore Tools
Advertisement