Xin lưu ý rằng không có điều gì là "phương thức riêng tư" bằng Python. gạch dưới đôi chỉ là tên mangling:
>>> class A(object):
... def __foo(self):
... pass
...
>>> a = A()
>>> A.__dict__.keys()
['__dict__', '_A__foo', '__module__', '__weakref__', '__doc__']
>>> a._A__foo()
Vì vậy, do đó __
tiền tố rất hữu ích khi bạn cần mangling xảy ra, ví dụ để không xung đột với tên lên hoặc dưới chuỗi thừa kế. Đối với các ứng dụng khác, dấu gạch dưới đơn sẽ tốt hơn, IMHO.
EDIT, liên quan đến sự nhầm lẫn trên __
, PEP-8 là khá rõ ràng về điều đó:
Nếu lớp học của bạn được thiết kế để được subclassed, và bạn có các thuộc tính mà bạn không muốn lớp con để sử dụng, xem xét đặt tên cho chúng với dấu gạch dưới kép và không có dấu gạch dưới. Điều này gọi ra Thuật toán mang tên của Python, trong đó tên của lớp là bị cắt xén thành tên thuộc tính. Điều này giúp tránh tên thuộc tính va chạm nên các lớp con vô tình chứa các thuộc tính với tên cùng một tên là .
Lưu ý 3: Không phải ai cũng thích mangling name. Hãy cố gắng cân bằng số cần tránh các xung đột tên ngẫu nhiên với khả năng sử dụng tiềm năng của người gọi nâng cao.
Vì vậy, nếu bạn không mong đợi lớp con vô tình xác định lại phương thức riêng có cùng tên, không sử dụng nó.
Nguồn
2010-08-02 05:51:50
Cảm ơn tất cả. Tôi tìm thấy một chủ đề hữu ích. http://stackoverflow.com/questions/70528/why-are-pythons-private-methods-not-actually-private – kurikintoki
Tốt hơn: http://stackoverflow.com/questions/1301346/the-meaning-of-a- single-and-a-double-underscore-before-an-object-name-in-python – laffuste