Efectivamente, como comenra Raúl, lo que nececitas implementas es el
> patrón factory method. Para implemetarlo en python yo suelo hacer uso
> de __new__: http://docs.python.org/reference/datamodel.html#object.__new__
>
>
>

Hmm.
No conocia __new__()
He tenido que googlear un poco para saber de que va...
Casi lo he conseguido. Si hago esto,


--------------------------------------------------------------
class fac(object):
        def __new__(cls, x):
                if x == 0:
                        return A()
                else:
                        return B()

class A(object):
        def __init__(self):
                print '__init__ en A'
        def f(self):
                print 'f en A'

class B(object):
        def __init__(self):
                print '__init__ en B'
        def f(self):
                print 'f en B'

class MyClass(fac):
        pass


o = MyClass(0)
o.f()
--------------------------------------------------------------

obtengo lo siguiente

__init__ en A
f en A

Perfecto.
Sin embargo, si intento esto:

--------------------------------------------------------------
class fac(object):
        def __new__(cls, x):
                if x == 0:
                        return A()
                else:
                        return B()

class A(object):
        def __init__(self):
                print '__init__ en A'
        def f(self):
                print 'f en A'

class B(object):
        def __init__(self):
                print '__init__ en B'
        def f(self):
                print 'f en B'

class MyClass(fac):
        def __init__(self):
                print '__init__ en MyClass'


o = MyClass(0)
o.f()
--------------------------------------------------------------

No parece que __init__() en MyClass sea invocado.
Alguien me puede dar una pista?


Jose
_______________________________________________
Python-es mailing list
[email protected]
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/

Responder a