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/