Có thể có sự nhầm lẫn giữa tư nhân lớp và tư nhân mô-đun .
Một mô-đun riêng bắt đầu bằng một dấu gạch dưới
Như vậy một phần tử không được sao chép cùng khi sử dụng from <module_name> import *
hình thức của lệnh nhập; tuy nhiên, nó được nhập nếu sử dụng import <moudule_name>
cú pháp ( xem câu trả lời của Ben Wilhelm )
Chỉ cần xóa một dấu gạch dưới khỏi .__ num của ví dụ câu hỏi và nó sẽ không hiển thị trong các mô-đun nhập a.py bằng from a import *
cú pháp.
Một lớp riêng bắt đầu bằng hai dấu gạch dưới (còn gọi là dunder tức là d-ouble under-points)
Một biến như vậy có tên "mangled" để bao gồm tên lớp, v.v.
Nó vẫn có thể được truy cập bên ngoài logic lớp, thông qua tên được đọc
Mặc dù tên xáo trộn có thể phục vụ như một thiết bị phòng ngừa nhẹ chống lại truy cập trái phép, mục đích chính của nó là để ngăn chặn các xung đột tên có thể xảy ra với các thành viên lớp của các lớp tổ tiên. Xem tài liệu tham khảo hài hước nhưng chính xác của Alex Martelli để đồng ý với người lớn khi anh mô tả quy ước được sử dụng liên quan đến các biến này.
>>> class Foo(object):
... __bar = 99
... def PrintBar(self):
... print(self.__bar)
...
>>> myFoo = Foo()
>>> myFoo.__bar #direct attempt no go
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'Foo' object has no attribute '__bar'
>>> myFoo.PrintBar() # the class itself of course can access it
99
>>> dir(Foo) # yet can see it
['PrintBar', '_Foo__bar', '__class__', '__delattr__', '__dict__', '__doc__', '__
format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__',
'__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__
', '__subclasshook__', '__weakref__']
>>> myFoo._Foo__bar #and get to it by its mangled name ! (but I shouldn't!!!)
99
>>>
>>> import fileinfo >>> m = fileinfo.MP3FileInfo() >>> m.__parse("/music/_singles/kairo.mp3") 1 Traceback (innermost last): File "<interactive input>", line 1, in ? AttributeError: 'MP3FileInfo' instance has no attribute '__parse'
fileinfo.MP3FileInfo () là một thể hiện của lớp. Điều này đưa ra ngoại lệ này khi bạn sử dụng dấu gạch dưới kép. Trong trường hợp của bạn, bạn không tạo một lớp, bạn chỉ tạo một mô-đun. Xem thêm: stackoverflow.com/questions/70528/