2016-08-31 2 views
-1

Fall 1:Was Happning hier über Does Python Aufschalten

class A(object): 
    def __init__(self): 
     print "A" 
class B(A): 
    pass 
c = b() 
#output: 
#A 

Fall 2:

class A(object): 
    def __init__(self): 
     print "A" 
class B(A): 
    def __init__(self): 
     print "B" 
c = b() 
#output: 
#B 

In case1 läuft es den Konstruktor von class A und in case2 läuft es die Erbauer von class B.

Also, wenn case1 druckt, A versteht, dass es den class A Konstruktor ausgeführt wird, weil class B es geerbt hat.

Dann in Case2 nur den class B Konstruktor, aber nicht class A Konstruktor, warum ist das.

Nun, was passiert hier. Überschreibt Python den class A Konstruktor? Oder was passiert "Ich bin neu in der Programmierung."

+3

Der * Initialisierer * wird überschrieben. Auf den übergeordneten * Initialisierer * kann mit 'super' zugegriffen werden. –

+1

Wenn Sie ein '__init__' in' B' setzen, überschreibt es das in 'A'. Wenn Sie es nicht tun, wird es nicht. Pythons '__init__' Methoden rufen nicht automatisch die Methoden der Superklassen '__init__' auf. Und ich weiß nicht, warum du deinen Titel "überladen" hast. – khelwood

+1

* "Gemäß dem OOP-Konzept können Konstruktoren nicht vererbt werden." * - sagt wer? – deceze

Antwort

2

Wenn eine Klasse erstellt wird, wird gemäß der Dokumentation die Basisklasse immer gespeichert. Daher werden alle Abhängigkeiten aufgelöst, wenn ein Attribut nicht gefunden wird. Der Prozess funktioniert in allen Basisklassen. In Ihrem Fall hat die Klasse B keine init-Methode, also ruft sie ihre übergeordnete Methode auf. Wenn Sie im zweiten Beispiel den Konstruktor der Basisklasse ausführen möchten, können Sie die Funktion super() verwenden.