Mungkin ada kebingungan antara privat kelas dan privat modul .
Sebuah modul pribadi dimulai dengan satu garis bawah
elemen tersebut tidak disalin bersama saat menggunakan from <module_name> import *
bentuk perintah import; namun diimpor jika menggunakan import <moudule_name>
sintaks ( lihat jawaban Ben Wilhelm )
Cukup hapus satu garis bawah dari nomor .__ dari contoh pertanyaan dan itu tidak akan ditampilkan dalam modul yang mengimpor a.py menggunakan from a import *
sintaks.
Sebuah kelas privat dimulai dengan dua garis bawah (alias Dunder yaitu d-ouble bawah skor)
variabel tersebut memiliki nama "hancur" untuk menyertakan classname dll
Hal ini masih bisa diakses di luar logika kelas, melalui nama hancur.
Meskipun nama mangling dapat berfungsi sebagai alat pencegahan ringan terhadap akses yang tidak sah, tujuan utamanya adalah untuk mencegah kemungkinan tabrakan nama dengan anggota kelas dari kelas leluhur. Lihat referensi Alex Martelli yang lucu tapi akurat untuk memberikan persetujuan pada orang dewasa saat dia menggambarkan konvensi yang digunakan terkait dengan variabel-variabel ini.
>>> 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 () adalah turunan dari kelas. Yang memberikan pengecualian ini ketika Anda menggunakan garis bawah ganda. Sedangkan dalam kasus Anda, Anda tidak membuat kelas, Anda baru saja membuat modul. Lihat juga: stackoverflow.com/questions/70528/…