Lorsque j'ai étendu certaines classes générées par un outil, je n'ai pas réalisé qu'il s'agissait de classes de style ancien jusqu'à ce que j'essaie d'utiliser super(). Le super() ne fonctionne pas avec des classes de style ancien, alors je suis cette erreur:Est-il possible d'étendre les anciennes et nouvelles classes de style?
TypeError: super() argument 1 must be type, not classobj
Par exemple, essayez cet extrait:
>>> 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
J'étais curieux de savoir ce qui se passerait si je tendis B de l'objet aussi bien pour en faire une nouvelle classe de style, et il a semblé faire super() travail.
>>> class B(A, object):
... def greet(self):
... print "B says hi"
...
>>> super(B, B()).greet()
A says hi
Est-ce une solution de contournement appropriée ou aurai-je des conséquences indésirables plus tard?
Pourquoi ne pouvez-vous pas changer 'class A'' 'classe A (objet)'? Qu'est-ce qui vous empêche de réparer la cause première et de tout faire nouveau style? Pourquoi pensez-vous qu'une solution de rechange est meilleure qu'une solution? –
La raison en est que la classe A est générée (comme je l'ai mentionné au début, j'étend les classes générées par l'outil). Si je fais ce changement, la prochaine fois que je régénérerai les classes, elles seront écrasées. – haridsv