Tôi có một lớp, nhưng mọi phương thức trong đó phải là riêng tư (ngoài hình thức __init__
và __str__
). Tôi có nên biểu thị mọi phương thức với dấu gạch dưới kép, hay đó được coi là thực hành xấu?
Tôi có một lớp, nhưng mọi phương thức trong đó phải là riêng tư (ngoài hình thức __init__
và __str__
). Tôi có nên biểu thị mọi phương thức với dấu gạch dưới kép, hay đó được coi là thực hành xấu?
Câu trả lời:
Các phương thức riêng tư thực sự - những phương thức không thể nhìn thấy hoặc được sử dụng từ bên ngoài một lớp - không tồn tại trong Python. Những gì chúng tôi có là những quy ước chỉ là những gợi ý để không chạm vào những thứ bạn không nên.
Gần nhất bạn có được sự riêng tư là xáo trộn tên. Một thuộc tính của MyClass có tên __some_attr
sẽ chỉ được đổi tên thành _MyClass__some_attr
bên trong, khiến cho việc tham chiếu nó từ bên ngoài lớp trở nên hơi khó xử. Điều này hiếm khi được sử dụng. Những gì hầu hết mọi người làm chỉ đơn giản là tiền tố một dấu gạch dưới ( _attr
) như một ký hiệu rằng một cái gì đó không nên dựa vào & không phải là một phần của giao diện công cộng.
Sử dụng dấu gạch dưới kép trước và sau mã định danh, trong khi không bị cấm, được coi là dành riêng cho các chi tiết ngôn ngữ bên trong (như phương pháp 'ma thuật'). Bạn không nên đi xung quanh với những cái mới __attr__
(trừ khi bạn hack người phiên dịch).
__some_attr
sẽ không được tham chiếu ở bên ngoài lớp học? Sẽ không ổn nếu sử dụng hai dấu gạch dưới hàng đầu?