Als ich einige Tool-generierte Klassen erweiterte, erkannte ich nicht, dass sie Klassen im alten Stil sind, bis ich versuchte, super() zu verwenden. Die super() nicht mit alten Stil-Klassen arbeiten, also habe ich diesen Fehler:Ist es in Ordnung, alte und neue Stilklassen zu erweitern?
TypeError: super() argument 1 must be type, not classobj
Eg, versuchen Sie diesen Schnipsel:
>>> 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
Ich war nur neugierig, was passieren würde, wenn ich B verlängert auch aus dem Objekt, um es zu einer neuen Stilklasse zu machen, und es schien super() zu funktionieren.
>>> class B(A, object):
... def greet(self):
... print "B says hi"
...
>>> super(B, B()).greet()
A says hi
Ist dies eine geeignete Problemumgehung oder habe ich später einige unerwünschte Folgen?
Warum können Sie 'Klasse A' nicht in' KlasseA (Objekt) 'ändern? Was hindert Sie daran, die Ursache zu beheben und alles neu zu gestalten? Warum denkst du, dass eine Umgehung besser ist als eine Lösung? –
Der Grund ist, dass die Klasse A generiert wird (wie ich eingangs erwähnt habe, erweitere ich vom Tool generierte Klassen). Wenn ich diese Änderung mache, werden die Klassen beim nächsten Generieren überschrieben. – haridsv