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

  • Adam Outler

    Adam Outler

    19 EKİM 2006
  • makemebad35

    makemebad35

    17 NİSAN 2006
  • vgeller1

    vgeller1

    22 Kasım 2009