SORU
23 EYLÜL 2010, PERŞEMBE


Neden değil't Python'in __init__ yöntemlerini üst sınıf otomatik olarak çağrılır?

Neden Python tasarımcılar karar alt' __init__() yöntemleri otomatik olarak kendi superclasses __init__() yöntemleri deme, başka bir dil gibi mi? Bu Pythonic ve gerçekten aşağıdaki gibi tavsiye deyim?

class Superclass(object):
    def __init__(self):
        print 'Do something'

class Subclass(Superclass):
    def __init__(self):
        super(Subclass, self).__init__()
        print 'Do something else'

CEVAP
23 EYLÜL 2010, PERŞEMBE


Python arasındaki temel fark __init__ ve diğer dillerkurucular__init__değilyapıcı: birbaşlatıcı(gerçekkurucu(varsa, ama daha sonra; -) __new__ ve yine tamamen farklı şekilde) çalışır. Süreyapımtüm superclasses (ve, hiç şüphesiz, "önce" sen aşağıya doğru inşa devam) açıkçası söylediğin bir parçasıdır . bunu yaparken ^strong>yapımbir alt sınıfın örneği, açıkça için durum böyle değilbaşlatılıyorberi orada birçok kullanım durumunda olan superclasses' başlatma gerekiyor atlanmış, değiştirilmiş, kontrollü -- olay, eğer, "orta" alt başlatma, ve benzeri.

Temel olarak, başlatıcı süper-sınıf temsilci Heyeti, bu da otomatik değil aynı nedenlerden dolayı Python otomatik değilherhangi birdiğer yöntemler ve not "diğer diller" yapma diğer yöntem için süper sınıf bir heyet otomatik ya da...sadeceKurucu (ve eğer varsa, yıkıcı), bahsettiğim gibi,değil__init__. (Davranış __new__ de oldukça tuhaf, ama çok doğrudan ilişkisi sorunuza beri __new__ böyle bir tuhaf yapıcı değil aslında mutlaka ihtiyaç için inşa bir şey yok. çok iyi bir dönüş mevcut örneği, hatta olmayan bir örneği... açıkça Python sunarçokdaha mekaniği "diğer diller" aklında ne var, hangi . daha kontrolünü ^em>ayrıcaotomatik bir heyet olması __new__ kendini! - içerir).

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Amena

    Amena

    15 Kasım 2006
  • Ben Schoon

    Ben Schoon

    23 Kasım 2012
  • Madeon

    Madeon

    31 Ocak 2010