betrachten den folgenden Code:Vererbung: Werden bei jedem Aufruf von 'super' Elternobjekte erstellt?
class A:
def __init__(self):
print('class A is being constructed')
def print_msg(self):
print('Hello, I am class A')
class B(A):
def __init__(self):
super(B, self).__init__()
print('class B is being constructed')
def print_msg(self):
super(B, self).print_msg()
print('Hello, I am class B')
Wie Sie sehen können, ich nenne super(B, self)
jedes Mal B.print_msg()
genannt wird.
Meine Frage ist, ob jedes Mal, wenn ich es tue, es ein neues Objekt von A konstruiert, oder ist es ein Objekt, das anfänglich erstellt wurde, und ich jedes Mal seine Referenz bekomme?
Mit anderen Worten, würde der folgende Code A 100 mal konstruieren?
b = B()
for i in range(100):
b.print_msg()
Der Grund, warum ich in darüber Gedanken zu machen habe, ist, dass die .__init__()
Methode der Eltern nicht automatisch aufgerufen wird, wenn das Objekt des Kindes angelegt wird.
Was wird gedruckt, wenn Sie den Code ausführen? –
@JimWright Es druckt die Nachricht von A, gefolgt von B's Nachricht einhundert Mal – Chur7U
Nein, wenn Sie 'super()' verwenden, beziehen Sie sich nur auf ein vorhandenes ** Klasse ** -Objekt. – martineau