Прежде всего, если вы хотите использовать супер функцию, то вы должны использовать базовый класс как объект, как этого
class c(object):
pass
Потому что супер поддержку функции только в новом программировании стиля только питон.
Теперь переход к функции базового класса базового класса. В вашем случае как вызвать функцию my_method класса C от A.
Вы можете сделать это двумя способами статически и динамически.
Динамически
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()
Здесь (self.__class__.__bases__
) возвращает базовые классы А в Thats типа кортежей, почему я взял 0-й индекс. Таким образом, он возвращает класс B, имея класс B в качестве аргумента в супер, он вернет функцию my_method базового класса класса b.
Статически
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
Вы имеете в виду родительский класс 'SomeClass'? – Dschoni
Звучит как [XY-проблема] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). Как правило, вам не нужно обращаться к конкретным предкам, просто дайте 'супер' выяснить, к кому обращаться, в этом весь смысл [« MRO »(порядок разрешения метода)] (https://www.python.org/download /releases/2.3/mro/). – MSeifert
Обратите внимание, что существует только один объект, созданный 'A()'. Этот объект является экземпляром всех его суперклассов, но для родительских классов не создаются индивидуальные объекты. – kazemakase