On Monday 11 May 2009 04:39:41 pm roge...@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/ -- Luis Zarrabeitia (aka Kyrie) Fac. de Matemática y Computación, UH. http://profesores.matcom.uh.cu/~kyrie -- http://mail.python.org/mailman/listinfo/python-list