<s>[INST] Python's use of __new__ and __init__? I'm just trying to streamline one of my classes and have introduced some functionality in the same style as the flyweight design pattern.
However, I'm a bit confused as to why __init__ is always called after __new__. I wasn't expecting this. Can anyone tell me why this is happening and how I implement this functionality otherwise? (apart from putting the implementation into the __new__ which feels quite hacky).
Here's an example:
class A(object):
    _dict = dict()

    def __new__(cls):
    	if 'key' in A._dict:
    		print "EXISTS"
    		return A._dict['key']
    	else:
    		print "NEW"
    		return super(A, cls).__new__(cls)

    def __init__(self):
    	print "INIT"
    	A._dict['key'] = self
    	print ""

a1 = A()
a2 = A()
a3 = A()

Outputs:
NEW
INIT

EXISTS
INIT

EXISTS
INIT

Why?
 [/INST] 
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: http://mail.python.org/pipermail/tutor/2008-April/061426.html
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 you have a good factory example.
 </s>