Vor allem, wenn Sie Super-Funktion verwenden wollen, dann müssen Sie die Basisklasse als Objekt verwenden, wie diese
class c(object):
pass
Denn Super-Funktionsunterstützung in nur neuer Art der Programmierung von Python nur.
Jetzt kommt, wie auf die Funktion der Basisklasse der Basisklasse zugreifen. In Ihrem Fall, wie my_method Funktion der Klasse C von A aufgerufen werden.
Sie können dies auf zwei Arten statisch und dynamisch tun.
dynamisch
class C(object):
def my_method(self):
print "in function c"
class B(C):
def my_method(self):
print "in function b"
class A(B):
def my_method(self):
# Call my_method from B
super(A, self).my_method()
# This is how you can call my_method from C here ?
super((self.__class__.__bases__)[0], self).my_method()
obj_a = A()
obj_a.my_method()
Hier (self.__class__.__bases__
) kehrt Basisklassen von A in Tupel Typ ist, warum ich den Index 0. Nahm. Also gibt es die Klasse B zurück, so dass sie die B-Klasse als ein Argument in super hat, sie wird die Funktion my_method der Basisklasse der Klasse b zurückgeben.
Statisch
class C(object):
def my_method(self):
print "in function c"
class B(C):
def my_method(self):
print "in function b"
class A(B):
def my_method(self):
# Call my_method from B
super(A, self).my_method()
# This is how you can call my_method from C here ?
obj_a = A()
super(A,obj_a).my_method() # calls function of class B
super(B,obj_a).my_method() # calls function of class A
bedeuten Sie die übergeordnete Klasse von 'SomeClass'? – Dschoni
Klingt wie ein [XY-Problem] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). Im Allgemeinen sollten Sie nicht auf bestimmte Vorfahren zugreifen müssen. Lassen Sie "super" herausfinden, auf wen Sie zugreifen können. Das ist der springende Punkt bei ["MRO" (Reihenfolge der Methodenauflösung)] (https://www.python.org/download) /releases/2.3/mro/). – MSeifert
Beachten Sie, dass nur ein Objekt mit 'A()' erstellt wurde. Dieses Objekt ist eine Instanz aller seiner Superklassen, aber es werden keine individuellen Objcets für die Elternklassen erstellt. – kazemakase