Modify arguments between __new__ and __init__
Arnaud Delobelle
arnodel at googlemail.com
Sun Dec 23 03:18:10 EST 2007
On Dec 23, 5:03 am, Steven D'Aprano <st... at REMOVE-THIS-
cybersource.com.au> wrote:
> When you call a new-style class, the __new__ method is called with the
> user-supplied arguments, followed by the __init__ method with the same
> arguments.
>
> I would like to modify the arguments after the __new__ method is called
> but before the __init__ method, somewhat like this:
>
> >>> class Spam(object):
>
> ... def __new__(cls, *args):
> ... print "__new__", args
> ... x = object.__new__(cls)
> ... args = ['spam spam spam']
> ... return x
> ... def __init__(self, *args):
> ... print "__init__", args # hope to get 'spam spam spam'
> ... return None
>
> but naturally it doesn't work:
>
> >>> s = Spam('spam and eggs', 'tomato', 'beans are off')
>
> __new__ ('spam and eggs', 'tomato', 'beans are off')
> __init__ ('spam and eggs', 'tomato', 'beans are off')
>
> Is there any way to do this, or am I all outta luck?
>
> --
> Steven
The ususal way is to override the __call__ method of the metaclass.
HTH
--
Arnaud
More information about the Python-list
mailing list