Когда я расширил некоторые сгенерированные инструментом классы, я не осознавал, что это классы старого стиля, пока не попытался использовать super (). Super () не работает со старыми классами, поэтому я получил эту ошибку:
TypeError: super() argument 1 must be type, not classobj
Например, попробуйте этот фрагмент:
>>> class A:
... def greet(self):
... print "A says hi"
...
>>> class B(A):
... def greet(self):
... print "B says hi"
...
>>> super(B, B()).greet()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: super() argument 1 must be type, not classobj
Мне было просто любопытно, что произойдет, если я также расширю B из объекта, чтобы сделать его новым стилевым классом, и, похоже, что super () работает.
>>> class B(A, object):
... def greet(self):
... print "B says hi"
...
>>> super(B, B()).greet()
A says hi
Это подходящий обходной путь или у меня будут некоторые нежелательные последствия позже?