önce, "Expert Python Programming" kitabından biraz alıntı yapalım:Python'da süper ve klasik çağrıları karıştırma
Aşağıdaki örnekte, __init__ yöntemini kullanarak temel sınıflarını çağıran bir C sınıfı B sınıfının iki kez çağrılmasını sağlar!
class A(object):
def __init__(self):
print "A"
super(A, self).__init__()
class B(object):
def __init__(self):
print "B"
super(B, self).__init__()
class C(A,B):
def __init__(self):
print "C"
A.__init__(self)
B.__init__(self)
print "MRO:", [x.__name__ for x in C.__mro__] #prints MRO: ['C', 'A', 'B', 'object']
C() #prints C A B B
ve son olarak, burada neler olup bittiğine dair bir açıklama:
Bu, C örneği ile yapılan A .__ init __ (self) çağrısından kaynaklanır. böylece süper (A, self) .__ init __() B çağrısı yapıcısını çağırır. Başka bir deyişle, süper tüm sınıf hiyerarşisinde kullanılmalıdır. Sorun şu ki, bu hiyerarşinin bir kısmı üçüncü taraf kodunda yer almaktadır.
Neden "super(A, self).__init__()
, B'nin yapıcısını çağırıyor" diye bir fikrim yok. Lütfen bu anı açıkla. Çok teşekkürler.
teşekkürler. Bir soru - A sınıfı bir kurucu içinde "süper (A, self) .__ init __()" çağrıldığında, onun "self" argümanı, yeni örnek verdiğimiz C örneğimize eşit olduğu doğru mu? – varnie
@varnie: evet. 'Self'in gerçekten bir' C 'örneğini görmek için' __init __() 'yönteminin içinde super (A, self)' yazdırabilirsiniz. –