2016-04-21 8 views
-1
class A(): 
    def __init__(self): 
     print("A") 

class B(): 
    def __init__(self): 
     super() 
     print("B") 

B() 

Dieser Code druckt "B". Meine Erwartung war, dass esDruckanweisungen im Superkonstruktor nicht drucken

A 
B 

oder zumindest

B 
A 

drucken. Warum druckt es nur B?

+0

Nun, Sie sind nicht mit 'A()' überhaupt, Neight in Haupt noch in 'B()'. Außerdem: Was ist 'super()'? – MERose

Antwort

3
  1. Klasse B nicht der Klasse erbt A
  2. Dies ist nicht die gute Syntax, super nicht Konstruktor nicht aufrufen, gibt es Verweis auf übergeordnete Klasse (und muss die Art der aktuellen Klasse übergeben werden und einen Verweis auf es (Selbst-))

Korrektur:

class A(object): 
    def __init__(self): 
    print "A" 

class B(A): # Inherit A class 
    def __init__(self): 
    super(B, self).__init__() # Call A constructor 
    print "B" 
1

super selbst gibt nur einen Verweis auf die übergeordnete Klasse. Sie müssen tatsächlich die entsprechende Methode aufzurufen:

super().__init__()