[Python-Dev] py3k: TypeError: object.__init__() takes no parameters
Terry Reedy
tjreedy at udel.edu
Sat Jan 17 03:20:59 CET 2009
Nick Coghlan wrote:
> Terry Reedy wrote:
>> So I wonder whether the proper change might have been to remove
>> object.__init__.
>
> That would have broken too much code, since a lot of immutable types
> rely on it (they only override __new__ and leave __init__ alone).
In what way do they depend on the equivalent of "def f(): pass"?
If, during the object creation process, "if hasattr(newob, '__init__'):"
were added after calling cls.__new__ and before calling newob.__init__,
what dependency would be left?
To repeat a previous comment, the doc sentence beginning "If a base
class has an __init__() method," implies that it is intended to be
possible for classes to not have an __init__ method. Should the doc be
changed. Is this just a holdover from pre-object-class days?
> For more info, see Guido's checkin changing the behaviour and the
> associated tracker issue:
> http://svn.python.org/view?rev=54539&view=rev
> http://bugs.python.org/issue1683368
Ah yes. In that thread I complained that
>>> object.__init__.__doc__
'x.__init__(...) initializes x; see x.__class__.__doc__ for signature'
unchanged in 3.0) is uninformative. Why cannot object.__init__.__doc__
tell the truth?
"object.__init__(self) takes no other args and does nothing"
The signature of a class as a callable is *not* the signature of its
__init__ method!
In particular
>>> object.__class__.__doc__
"type(object) -> the object's type\ntype(name, bases, dict) -> a new type"
(also unchanged in 3.0) is irrelevant and uninformative as to whether
object.__init__ accepts (as it used to) or rejects (as it now does) args
other than 'self'.
Terry Jan Reedy
More information about the Python-Dev
mailing list