Why is __init__() always called after __new__() in Python?

Use __new__ when you need to control
the creation of a new instance.

Use
__init__ when you need to control initialization of a new instance.

__new__ is the first step of instance creation. It’s called first, and is
responsible for returning a new
instance of your class.

In contrast,
__init__ doesn’t return anything; it’s only responsible for initializing the
instance after it’s been created.

In general, you shouldn’t need to
override __new__ unless you’re
subclassing an immutable type like
str, int, unicode or tuple.

From April 2008 post: When to use __new__ vs. __init__? on mail.python.org.

You should consider that what you are trying to do is usually done with a Factory and that’s the best way to do it. Using __new__ is not a good clean solution so please consider the usage of a factory. Here’s a good example: ActiveState Fᴀᴄᴛᴏʀʏ ᴘᴀᴛᴛᴇʀɴ Recipe.

Leave a Comment