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

  • 3biblecom

    3biblecom

    23 NİSAN 2011
  • Numberphile

    Numberphile

    15 EYLÜL 2011
  • Tianna Sierra Dance

    Tianna Sierr

    16 EYLÜL 2013