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

  • Ammine Getahun

    Ammine Getah

    21 HAZİRAN 2011
  • Defence Videos

    Defence Vide

    13 Mayıs 2013
  • Vortez

    Vortez

    27 Temmuz 2009