[Python-es] decidir en "real time" de qué clase heredar
Txema Vicente
txema en nabla.net
Mar Feb 14 22:27:10 CET 2012
> donde me gustaria que MyClass pudiese decidir si quiere heredar de
> Base1 o de Base2... si es que eso es posible.
> Las primeras respuestas que recibi parecian indicar que con una
> Factory era trivial, pero la verdad es que no he sido capaz
> :)faq.wikidot.com/
Por curiosidad lo he intentado. No se si es muy recomendable hacer esto,
pero parece que funciona:
class Base1(object):
def __init__(self):
print "Base1.init"
class Base2(object):
def __init__(self):
print "Base2.init"
class MyClass(object):
def __new__(cls, x):
base = None
if x==1: base = Base1
elif x==2: base = Base2
if base is None: return object.__new__(cls)
clase = type('MyClass', (MyClass, base, object), {})
return super(MyClass, clase).__new__(clase)
def __init__(self, x):
self.x = x
print "Myclass.init"
super(MyClass, self).__init__()
for x in range(0,3):
a = MyClass(x)
print str(x), str(a), a.__class__.__bases__
SALIDA:
>>>
Myclass.init
0 <__main__.MyClass object at 0x040FB6B0> (<type 'object'>,)
Myclass.init
Base1.init
1 <__main__.MyClass object at 0x040FBAF0> (<class '__main__.MyClass'>,
<class '__main__.Base1'>, <type 'object'>)
Myclass.init
Base2.init
2 <__main__.MyClass object at 0x041001D0> (<class '__main__.MyClass'>,
<class '__main__.Base2'>, <type 'object'>)
Más información sobre la lista de distribución Python-es