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.