Issue 1123716: descrintro describes new and init behavior wrong (original) (raw)

Issue1123716

Created on 2005-02-16 06:48 by bethard, last changed 2022-04-11 14:56 by admin. This issue is now closed.

Messages (3)
msg60659 - (view) Author: Steven Bethard (bethard) * (Python committer) Date: 2005-02-16 06:48
The current descrintro.html says: "__new__ must return an object... If you return an existing object, the constructor call will still call its __init__ method. If you return an object of a different class, its __init__ method will be called..." This suggests that __new__ will call __init__ of the object even if the object is a different type. The code in typeobject.c disagrees with this: static PyObject * type_call(PyTypeObject *type, PyObject *args, PyObject *kwds) { ... /* If the returned object is not an instance of type, it won't be initialized. */ if (!PyType_IsSubtype(obj->ob_type, type)) return obj; ... } Suggested fix: "__new__ must return an object... If you return an existing object, the constructor call will still call its __init__ method unless the object is an instance of a different class..."
msg60660 - (view) Author: Michael Chermside (mcherm) (Python triager) Date: 2005-02-23 15:02
Logged In: YES user_id=99874 I agree strongly that the docs need to be clarified. I spent a while playing around with it and confirmed that your reading of it appears to be correct, and your proposed wording is simple and straightforward. I second the request to make this change.
msg63061 - (view) Author: Facundo Batista (facundobatista) * (Python committer) Date: 2008-02-27 02:53
Documentation had several updates in these 2+ years. Now it says: """ If __new__() returns an instance of cls, then the new instance’s __init__() method will be invoked like __init__(self[, ...]), where self is the new instance and the remaining arguments are the same as were passed to __new__(). If __new__() does not return an instance of cls, then the new instance’s __init__() method will not be invoked. """ , which is clearer. Thanks!
History
Date User Action Args
2022-04-11 14:56:09 admin set github: 41584
2008-02-27 02:53:05 facundobatista set status: open -> closedresolution: fixedmessages: + nosy: + facundobatista
2005-02-16 06:48:37 bediviere.historic create