Cuando amplié algunas clases generadas por la herramienta, no me di cuenta de que son clases de estilo antiguo hasta que intenté usar super(). El super() no funciona con las clases de estilo antiguo, así que tengo este error:¿Está bien ampliar las clases de estilo antiguo y nuevo?
TypeError: super() argument 1 must be type, not classobj
Por ejemplo, prueba este fragmento:
>>> 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
Tenía curiosidad lo que pasaría si me prolongado B desde object también para convertirlo en una nueva clase de estilo, y parecía hacer que super() funcionara.
>>> class B(A, object):
... def greet(self):
... print "B says hi"
...
>>> super(B, B()).greet()
A says hi
¿Es esta una solución adecuada o tendré algunas consecuencias no deseadas más adelante?
¿Por qué no se puede cambiar 'clase A 'a' clase A (objeto) '? ¿Qué le impide solucionar la causa raíz y hacer que todo sea nuevo? ¿Por qué crees que una solución alternativa es mejor que una solución? –
La razón es que se genera la clase A (como mencioné al principio, estoy ampliando las clases generadas por la herramienta). Si realizo este cambio, la próxima vez que regenere las clases, se sobrescribirán. – haridsv