SORU
19 AĞUSTOS 2009, ÇARŞAMBA


Tek bir anlamı çift çizgi Python nesne adı daha önce

Bu kez ve herkes için açıklığa kavuşturmak istiyorum. Birisi bir nesnenin adı daha önce de altını çiziyor önde gelen Python ile sahip olmanın tam anlamını açıklayabilecek olan var mı? Ve bir çift bir tek lider arasındaki farkı açıklar çizgi de. Ayrıca, bunun anlamı, söz konusu nesne bir değişken, bir fonksiyon, bir yöntem olup aynı kalacak mı vs. mi?

CEVAP
19 AĞUSTOS 2009, ÇARŞAMBA


Tek Çizgi

Adları, önde gelen bir alt çizgi ile bir sınıfta, sadece öznitelik veya yöntem özel olmak üzere diğer programcılar için belirtmek için. Ancak, hiçbir özel isim kendisi ile yapılır.

PEP-8 alıntı:

_single_leading_underscore: "İç Kullanım" göstergesi. zayıf E. g. from M import * ile başlayan nesneleri al çizgi.

Alt Çizgi (Ad Değiştirme) Çift

the Python docs:

Herhangi bir tanımlayıcı formu __spam (en az iki lider altını çiziyor, en fazla bir eğik çizgi) sözel olarak değiştirildi _classname__spam nereye classname geçerli bir sınıf adı ile önde gelen bir alt çizgi(ler) çıkartılır. Bu ütüleme yapılır olmadan, ekonomik sözdizimsel pozisyon tanımlayıcı, yani kullanılabilir tanımlamak için sınıf-özel örnek ve sınıf değişkenleri, metotları, değişkenleri depolanan bütünsel ve hatta değişkenler saklı durumda. diğer sınıfları Özel bu sınıf.

Ve aynı sayfada bir uyarı:

Adı bozma amaçlanan dersleri vermek kolay bir yolu tanımlamak için “özel” örnek değişkenleri ve yöntemleri hakkında endişelenmenize gerek kalmadan örnek değişkenleri tarafından tanımlanan türetilmiş sınıfları veya mucking ile örnek değişkenleri tarafından kodu dışında sınıf. Bozma kuralları çoğunlukla kazaları önlemek için tasarlanmıştır; ya da özel kabul edilen bir değişken erişim değiştirmek için kararlı bir ruh için mümkün olduğunu unutmayın.

Örnek

>>> class MyClass():
...     def __init__(self):
...             self.__superprivate = "Hello"
...             self._semiprivate = ", world!"
...
>>> mc = MyClass()
>>> print mc.__superprivate
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: myClass instance has no attribute '__superprivate'
>>> print mc._semiprivate
, world!
>>> print mc.__dict__
{'_MyClass__superprivate': 'Hello', '_semiprivate': ', world!'}

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • FASHTAG

    FASHTAG

    5 EYLÜL 2012
  • Thehalopianoplayer

    Thehalopiano

    4 ŞUBAT 2011
  • William Hyde

    William Hyde

    23 HAZİRAN 2008