Foo.__new__ is what species of method?
Steven D'Aprano
steve+comp.lang.python at pearwood.info
Tue Jul 14 00:54:07 EDT 2015
On Tuesday 14 July 2015 14:45, Ben Finney wrote:
> Howdy all,
>
> The Python reference says of a class ‘__new__’ method::
>
> object.__new__(cls[, ...])
>
> Called to create a new instance of class cls. __new__() is a static
> method (special-cased so you need not declare it as such) that takes
> the class of which an instance was requested as its first argument.
This is correct. __new__ is a static method and you need to explicitly
provide the cls argument:
py> class Spam(object):
... def __new__(cls):
... print cls
...
py> Spam.__new__() # implicit first arg?
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: __new__() takes exactly 1 argument (0 given)
py> Spam.__new__(Spam)
<class '__main__.Spam'>
Furthermore:
py> type(Spam.__dict__['__new__'])
<type 'staticmethod'>
> I suspect this a bug in the reference documentation for ‘__new__’, and
> it should instead say “__new__ is a class method …”. Am I wrong?
I've made that mistake in the past too :-)
--
Steve
More information about the Python-list
mailing list