class A(object):
def foo(self):
print "A - foo"
def foo2(self):
print "foo2"
self.foo()
class B(A):
def foo(self):
print "B - foo"
def foo2(self):
super(B, self).foo2()
B().foo2()
I [senario1] zu bekommen versuchte:Python Super: eine Basisklasse Methode aufrufen, die eine andere Basisklassenmethode enthält, die von abgeleiteten Klasse außer Kraft gesetzt wird
foo2
A - foo
bekam aber [senario2]:
foo2
B - foo
statt.
Ich habe the explanation gefunden, aber ich frage mich, ob es einen Weg gibt, der [senario1] ergibt, ohne den Namen der Methode foo
in Klasse A
zu ändern?
können Sie 'A.foo2' ändern, so dass es explizit' nennt A.foo (selbst), aber das ist nicht wirklich eine gute Lösung. Ich denke, die beste Lösung wäre, den Namen 'B.foo' zu ändern. Wenn es 'A.foo' nicht überschreiben soll, dann überschreibe' A.foo' nicht. –
Ich frage mich, was passieren wird, wenn Sie innerhalb 'B.foo2' etwas wie' self .__ class__ = A' sagen und dann 'self.foo2()' und dann wieder 'self .__ class__ = B' aufrufen. In einem einfachen Beispiel habe ich getestet, dass dies wie erwartet funktioniert hat und was Sie wollen. – Aguy