I've noticed with latest python 3.1 checkout (68631) if I have this object hierarchy with a default __init__ in the superclass to be used by the subclasses which don't necessarily need an __init__ it blows up with a TypeError.
class Field(object): def __init__(self, data): """Default init for the subclasses""" print("init class=%r, self=%r" % (self.__class__.__name__, self)) super(Field, self).__init__(data) self.data = self.orig = data class IntegerField(Field): def __init__(self, data): """Overridden init""" super(IntegerField, self).__init__(data) self.data = int(data) class StringField(Field): pass f1 = StringField('abc') f2 = IntegerField('10') print("f1=%r" % f1.data) print("f2=%r" % f2.data) print(type(f1)) print(type(f2)) It blows up with init class='StringField', self=<__main__.StringField object at 0xb7d47b4c> Traceback (most recent call last): File "subclass-super-problem-py3k.py", line 17, in <module> f1 = StringField('abc') File "subclass-super-problem-py3k.py", line 5, in __init__ super(Field, self).__init__(data) TypeError: object.__init__() takes no parameters The exact same code runs under py 2.5 just fine. I can't think of anything to write in Field.__init__ to tell whether super is about to run __init__ on object. The problem can be fixed (inelegantly IMHO) like this class BaseField(object): def __init__(self, data): """Default init for the subclasses""" self.data = self.orig = data class Field(BaseField): def __init__(self, data): """Another Default init for the subclasses""" super(Field, self).__init__(data) class IntegerField(Field): def __init__(self, data): """Overridden init""" super(IntegerField, self).__init__(data) self.data = int(data) class StringField(Field): pass f1 = StringField('abc') f2 = IntegerField('10') print("f1=%r" % f1.data) print("f2=%r" % f2.data) print(type(f1)) print(type(f2)) Is this a bug or a feature? Is there a better work-around? -- Nick Craig-Wood <n...@craig-wood.com> -- http://www.craig-wood.com/nick _______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com