Вы имеете в виду простой, безопасный и понятный способ для всех (насколько супер() идет)?
Короткий ответ: нет.
Длинный ответ: да. Есть несколько способов сделать это. Один из них использует метакласс для автоматизации создания super() во время инициализации класса.
>>> class AutoSuper(type):
... def __init__(cls, name, bases, dict):
... super(AutoSuper, cls).__init__(name, bases, dict)
... setattr(cls, '_%s__super'%name, super(cls))
...
>>>
Таким образом, вызов super() создаваемого класса присваивается атрибуту __super. Манипуляция имени должна выполняться вручную, но экземпляры и подклассы поражают ее соответствующим образом. Теперь вам даже не нужно называть супер, просто используйте атрибут __super.
>>> class A(object):
... __metaclass__ = AutoSuper
... def m(self):
... print 'A'
...
>>>
>>> class B(A):
... def m(self):
... print 'B'
... self.__super.m()
...
>>>
>>> class C(B):
... def m(self):
... print 'C'
... self.__super.m()
...
>>> obj = C()
>>> obj.m()
C
B
A
>>>
Конечно, я публикую это только для учебных целей, я не рекомендую его использовать. Это то, что граничит с excess of cleverness, что некоторые осуждают на Python.
** не копировать и вставлять код в другой класс –
Возможный дубликат [Как вызвать метод родительского класса из дочернего класса в python?] (Http://stackoverflow.com/questions/805066/ how-to-call-a-parent-classes-method-from-child-class-in-python) –
Я написал «cut & paste», а не «copy & paste», есть разница – gae123