Sınıf yetkileri ile modül yetkileri arasında karışıklık olabilir .
Bir modül, özel ile başlar alt çizgi bir
Böyle bir eleman kullanılırken birlikte kopyalanır from <module_name> import *
alma komutu şeklini; ancak import <moudule_name>
sözdizimi kullanılıyorsa içe aktarılır ( Ben Wilhelm'in cevabına bakın )
Sorunun örneğinin a .__ num değerinden bir alt çizgiyi kaldırmanız yeterlidir ve from a import *
sözdizimini kullanarak a.py ithal eden modüllerde gösterilmez .
Özel bir sınıf iki alt çizgiyle başlar (diğer bir deyişle dunder yani d-ouble düşük puan)
Böyle bir değişken, sınıf adını dahil etmek için adını "karıştırılır" vb.
Bu duruma, karıştırılmış adla sınıf mantığının dışında da erişilebilir.
Ad yönetimi yetkisiz erişime karşı hafif bir önleme aracı olarak hizmet edebilse de, asıl amacı, ata sınıflarının sınıf üyeleriyle olası isim çarpışmalarını önlemektir. Alex Martelli'nin bu değişkenlerle ilgili olarak kullanılan sözleşmeyi tanımladığı için yetişkinlere rıza gösteren komik ama doğru referansına bakın .
>>> 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 () sınıfın bir örneğidir. Bu, çift alt çizgi kullandığınızda bu özel durumu verir. Sizin durumunuzda bir sınıf oluşturmadığınız halde, sadece bir modül oluşturdunuz. Ayrıca bakınız: stackoverflow.com/questions/70528/…