[Twisted-Python] Inheriting t.a.service.Service and super
Hi, I've been using Twisted for several months, and have frequently encountered the following problem. In my Twisted apps, I declare services (t.a.service.Service), which then I need to subclass. The problem is I can't call super() on such subclass, since the class Service in twisted does not inherit the built-in 'object' type ("TypeError: super() argument 1 must be type, not classobj"). For now, I can use other form of superclass calling, but that can be error prone. Is there any particular reason why class Service isn't a subclass of object ? It's kind of surprising since Service is designed to be subclassed. Thanks in advance for your help/replies. Cheers, Seb -- Sébastien LELONG sebastien.lelong[at]sirloon.net http://www.sirloon.net
On Tue, 20 Mar 2007 14:05:40 +0100, Sébastien LELONG <sebastien.lelong@dexia-securities.fr> wrote:
Hi,
I've been using Twisted for several months, and have frequently encountered the following problem.
In my Twisted apps, I declare services (t.a.service.Service), which then I need to subclass. The problem is I can't call super() on such subclass, since the class Service in twisted does not inherit the built-in 'object' type ("TypeError: super() argument 1 must be type, not classobj"). For now, I can use other form of superclass calling, but that can be error prone.
Is there any particular reason why class Service isn't a subclass of object ? It's kind of surprising since Service is designed to be subclassed.
Thanks in advance for your help/replies.
Cheers,
The major reason is backwards compatibility. Changing a class to inherit from object can break subclasses which didn't expect this. The idea that's been discussed so far to address this is something along the lines of adding an optional keyword argument to allow each user of the class to specify whether it wants classic or new-style. The default would be stay classic for a while, then that would be deprecated, and finally it would be an error not to ask for new-style (or maybe it would just become new-style by default, but I don't like that so much). Nothing's even nearly decided yet though. Suggestions are, of course, welcome. :) You might find the information given here: http://fuhm.net/super-harmful/ interesting as well, though (completely separate from whether Service is new-style or not). Jean-Paul
Thanks for your reply !
The major reason is backwards compatibility. Changing a class to inherit from object can break subclasses which didn't expect this. [...] You might find the information given here [link] interesting as well
OK, I understand that. And thanks for your interresting link. I guess I might need to reconsider my "super" approach :). For now, I'll use the oldstyle superclass calling with twisted's Service. Cheers, Seb -- Sébastien LELONG sebastien.lelong[at]sirloon.net http://www.sirloon.net
participants (2)
-
Jean-Paul Calderone
-
Sébastien LELONG