diff -r dfe7d9fee0b5 Doc/reference/datamodel.rst --- a/Doc/reference/datamodel.rst Sun Nov 23 16:01:20 2014 +0100 +++ b/Doc/reference/datamodel.rst Sun Nov 23 08:42:17 2014 -0800 @@ -1088,26 +1088,30 @@ Basic customization :meth:`__new__` is intended mainly to allow subclasses of immutable types (like int, str, or tuple) to customize instance creation. It is also commonly overridden in custom metaclasses in order to customize class creation. .. method:: object.__init__(self[, ...]) .. index:: pair: class; constructor - Called when the instance is created. The arguments are those passed to the + Called after the instance has been created (by :meth:`__new__`), but before + it is returned to the caller. The arguments are those passed to the class constructor expression. If a base class has an :meth:`__init__` method, the derived class's :meth:`__init__` method, if any, must explicitly call it to ensure proper initialization of the base class part of the instance; for - example: ``BaseClass.__init__(self, [args...])``. As a special constraint on - constructors, no value may be returned; doing so will cause a :exc:`TypeError` + example: ``BaseClass.__init__(self, [args...])``. + + Because :meth:`__new__` and :meth:`__init__` work together in constructing + objects (:meth:`__new__` to create it, and :meth:`__init__` to customise it), + no value may be returned by :meth:`__init__`; doing so will cause a :exc:`TypeError` to be raised at runtime. .. method:: object.__del__(self) .. index:: single: destructor statement: del Called when the instance is about to be destroyed. This is also called a