SORU
17 NİSAN 2010, CUMARTESİ


Neden python 'sihirli yöntemler mu'?

Ben zaten gezip tozuyor ile Python son zamanlarda, ve bir şey buluyorum, bu biraz tuhaf olduğunu ve daha geniş bir alana 'sihirli yöntemler', örneğin yapmak uzunluğu, kullanılabilir bir nesneyi uygulayan bir yöntem def __len__(self) ve sonra aradığında sana yazmak len(obj).

Sadece nesneler sadece len(self) bir yöntem tanımlamak ve doğrudan nesne, obj.len() örneğin bir üyesi olarak adı yok mu diye merak ediyorum? Python bunu bu şekilde yapmak için iyi bir sebep olmalı eminim, ama bir acemi olarak ne olduklarını henüz çözemedim.

CEVAP
17 NİSAN 2010, CUMARTESİ


AFAIK, len Bu konuda özel ve tarihi kökleri vardır.

İşte bir alıntı from the FAQ:

Neden Python için bazı yöntemler kullanıyor işlevselliği (örn listesi.() dizin) ama diğer fonksiyonları (len(liste) gibi)?

Büyük nedeni tarih. Fonksiyonlar bu işlemler için kullanılan tür bir grup için genel ve hangi hatta çalışmak için tasarlanmıştır yöntem yoktu nesneler tüm (örneğin Lale). Aynı zamanda uygun bir işlevi var bir şekilsiz uygulanan hazır olun kullandığınızda, nesneleri toplama Python işlevsel özellikleri (() göster, () uygulamak ve ark).

Aslında, len uygulama(), max(), (dk) yerleşik bir işlev olarak. uygulama daha aslında daha az kod onlara her tür yöntemler gibi. Olabilir bireysel davalar hakkında kelime oyunu ama Python bir parçası, ve de böyle köklü değişiklikleri yapmak için geç şimdi. İşlevlerine devam büyük kod kırılmasını önlemek.

"Sihirli yöntem" (aslında denir . diğer ^em>özel bir yöntemPython folklor) anlamda bir sürü yapmak, ve benzer işlevler diğer dillerde var. Çoğunlukla özel bir sözdizimi kullanıldığında örtülü olarak çağrılan kod için kullanılır.

Örneğin:

  • aşırı yüklenmiş operatörler (C ve diğerleri var)
  • /yıkıcı yapıcı
  • erişim için kanca bağlıyor
  • metaprogramming için araçlar

.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Creavite

    Creavite

    8 Mart 2009
  • Louis C.K.

    Louis C.K.

    18 HAZİRAN 2006
  • SunsetTrance

    SunsetTrance

    20 EYLÜL 2008