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
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).
Neden Java statik olarak bir sınıf bil...
Neden değil't Veritabanı-Öneki.bö...
Neden't iç içe geçmiş işlev kapan...
Neden diziler Nesneleri, ancak temel s...
Neden Python'In 'gizli'...