SORU
10 EKİM 2009, CUMARTESİ


Python tanımlama özel modül fonksiyonları

10* *göre:

Çoğu dil gibi, Python var özel kavramı unsurları:

  • Özel denilen olamaz fonksiyonları, kendi modülü dışında

Ben iki dosya tanımlarsanız ancak:

#a.py
__num=1

ve:

#b.py
import a
print a.__num

b.py çalıştırdığımda herhangi bir istisna vermeden 1 yazdırır. Diveintopython yanlış bir şey ya da ben mi yanlış anladım? Ve orada bir yol vardıryapınözel olarak bir modülün işlevi tanımlarsınız?

CEVAP
10 EKİM 2009, CUMARTESİ


Arasında bir karışıklık olabilirsınıf erlervemodül erler.

Birmodülü özelile başlarbir alt çizgi
Böyle bir eleman alma komutu from <module_name> import * form kullanırken kopyalanan birlikte değil; ancak eğer import <moudule_name> sözdizimi (see Ben Wilhelm's answer) kullanılarak alınır
Bu bir gelen bir alt çizgi sadece çıkarın.__soru num örnek ve bir alma modülleri göstermez.py.

Birsınıf özelile başlariki çizgi(aka dunder yani d-ouble altında puan)
Böyle bir değişken adı "" code vb. dahil karıştırılmış vardır
Hala karıştırılmış adı ile sınıf mantığı dışında, ulaşılabilir.
Adı bozma yetkisiz erişime karşı hafif önleme cihazı olarak kullanılabilir olsa da, ana amaç atası sınıfların sınıf üyeleri ile olası adı çarpışmaları önlemek için. Alex Martelli komik ama doğru başvurusuiki yetişkin insanaçıklandığı gibi Kongre kullanılan bu değişkenler açısından.

>>> 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
>>>

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • PoreoticsHD

    PoreoticsHD

    22 NİSAN 2010
  • tunez4you

    tunez4you

    20 EKİM 2008
  • videoisunrelated

    videoisunrel

    5 Mart 2009