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'>)
_______________________________________________
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/

Responder a