Lý do lịch sử tại sao Python sử dụng dấu gạch dưới kép cho các thành viên Class Private


8

Trong python, một chức năng hoặc biến riêng của mô-đun được đặt tên _foo. Nếu nó là riêng tư đối với một lớp thì đó là tên __foo, Các cơ chế đằng sau cách thức hoạt động của các lớp này là khác nhau, tuy nhiên điều đó ít liên quan đến câu hỏi.

Tại sao, trong quá trình thiết kế ngôn ngữ Python là các ký tự gạch dưới kép được chọn cho các thành viên riêng của lớp? Tại sao không gạch dưới đơn, như cho mô-đun riêng? Tại sao không phải là một số nhân vật khác được nhìn thấy nhiều hơn? (Phân biệt giữa _ và __ là khó).

Tôi chắc chắn có một số lịch sử ở đây, nhưng tôi gặp khó khăn khi tìm thấy nó, bởi vì tất cả những gì tôi tìm thấy là các hướng dẫn cho tôi biết ý nghĩa của nó, hơn là tại sao nó lại như vậy.


Tôi không quan tâm đến việc tranh luận liệu đó có phải là một lựa chọn tốt hay không, chỉ là khi biết lịch sử.
Lyndon White

1
Các dấu gạch dưới đơn không dành riêng cho các công cụ riêng tư mô-đun, chúng cũng được sử dụng cho các thành viên riêng của một lớp. Sự khác biệt giữa dấu gạch dưới đơn và kép chỉ là tên xáo trộn, thường không cần thiết hoặc thậm chí có hại trong các lớp.

"Trong python, một hàm hoặc biến riêng của mô-đun được đặt tên là _foo ..." điều này là sai: xem tại đây python.org/dev/peps/pep-0008/#descriptive-naming-styles . Tóm lại, dấu gạch dưới là một quy ước nạo, họ không làm cho bất cứ điều gì riêng tư (các phương thức vẫn có thể truy cập từ bên ngoài).
gents

Câu trả lời:


16

Đề xuất cải tiến Python (PEP) 8 giải thích ý nghĩa dự định đằng sau tên đơn và dấu gạch dưới kép, trong số các quy ước khác. Giống như nhiều PEP đầu tiên, nó đại diện cho sở thích của Guido van Rossum và như Nhà độc tài nhân từ được thừa nhận của Python, cuộc sống của anh ta thường được cộng đồng Python theo dõi.

Việc sử dụng các dấu gạch dưới đôi để chỉ "ma thuật" từ đi ít nhất là xa trở lại như tiền xử lý C, trong đó sử dụng ước rằng bắt đầu vào những năm 1970 ( ví dụ như , __FILE__, __LINE__). Nó đã làm như vậy bởi vì không có ký hiệu nào vượt quá giới hạn của bộ tiền xử lý, do đó, một mẫu đặt tên hiếm khi được sử dụng (nhiều dấu gạch dưới và chữ in hoa) hầu như đảm bảo không có xung đột.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.