Примечание Это ужасное "решение", я выкладываю его только для того, чтобы не делать это дома!
Я повторяю: делатьне делайте этого
Можно подумать об использовании этого миксина
class Super(object):
def super(self):
return super(self.__class__, self)
для получения self.super()
:
class A(object, Super):
def __init__(self):
print "A"
class B(A):
def __init__(self):
print "B"
self.super().__init__()
, получая:
>>> a = A()
A
>>> b = B()
B
A
Но будьте осторожны: Этот self.super()
не эквивалентен super(B, self)
- если A
также называется self.super().__init__()
, конструкция B
вызовет конструктор A
называть себя бесконечно, так как self.__class__
останется B
.Это связано с отсутствием __class__
, упомянутого в принятом ответе .Вы можете обойти эту проблему с помощью скрытого конечного автомата или сложного метакласса, который, например, проверяет фактическое положение класса в self.__class__.mro()
, но стоит ли оно того?Наверное, нет ...