On Monday 11 May 2009 04:39:41 pm rogeeff at gmail.com wrote:
so o = A() instead being equivalent to:
s = object()
A.__init__(s)
o = s
Actually, it would be more like this:
s = A.__new__(A)
if isinstance(s,A):
A.__init__(s)
o = s
o = my_factory_function( A )
You could tweak:
*) A's constructor (__new__) [keep in mind the 'insinstance' part]
*) A's initializer (changing the type, and so on... ugly, fragile and
dangerous, don't ever do it!)
*) A's metaclass (the instantiation happens in the metaclass' __call__ method,
you could rewrite it to suit your needs, as in [1]
*) or, just use a method named A instead of the A class (as the
multiprocessing.Queue function does)
I would use the 4th option. The fact that python classes are callable allows
you to switch from instantiation to function calling without having to change
the user's code.
[1]
http://trucosos.crv.matcom.uh.cu/snippets/95/