Metaclasses - magic functions

Ben Finney ben+python at
Tue Dec 20 18:39:33 EST 2016

"Mr. Wrobel" <mr at> writes:

> Quick question, can anybody tell me when to use __init__ instead of
> __new__ in meta programming?

Use ‘__new__’ to do the work of *creating* one instance from nothing;
allocating the storage, determining the type, etc. — anything that will
be *the same* for every instance. ‘__new__’ is the constructor.

Use ‘__init__’ to do the work of *configuring* one instance, after it
already exists. Any attributes that are special to an instance should be
manipulated in the ‘__init__’ method. ‘__init__’ is the initialiser.

Because Python has a powerful type system built in, you generally have
little or nothing to do in ‘__new__’, and more work in ‘__init__’ for
each instance.

That's a general answer because you haven't said what your goal is. What
is it you want to do with types?

 \      “Fur coats made for the ladies from their own skin.” —furrier, |
  `\                                                            Sweden |
_o__)                                                                  |
Ben Finney

More information about the Python-list mailing list