[Python-es] problema con __init__() en clase heredada, entre otras cosas, de threading.Thread

Jose Caballero jcaballero.hep en gmail.com
Mar Dic 13 01:57:58 CET 2011


Hola,



por una seria de razones (llamémosle exigencias del guión"), tenga una
jerarquía de clases heredadas unas de otras.
Una version simplificada del código es [1].

-- Necesito que la clase con la que voy a trabajar, MyClass_1, sea un
"singleton" y a la vez un "thread".

-- Al mismo tiempo esa clase debe tener una interfaz que se define en
Local_Interface_1

-- Y es importante que se sepa si los objetos de esa clase son creados de
forma adecuada o no.
Para asegurarme de ello, he intentado que la clase "madre de todas las
clases", Globa_Interface,
obligue a la implementación de un método initialize() y en su __init__() se
comprueba si un atributo self.valid es True o False.


Obtengo este error [2].
Por lo que he podido "debuggear" parece ser que con esta jerarquía de
clases la línea threading.Thread.__init__(self) nunca llega a ejecutarse.
¿Alguna idea de la razón?



Muchas gracias por adelantado. Cualquier comentario será bienvenido.
Jose


=====================================================
[1]

class Singleton(type):
    def __init__(cls, name, bases, dct):
        cls.__instance = None
        type.__init__(cls, name, bases, dct)
    def __call__(cls, *args, **kw):
        if cls.__instance is None:
            cls.__instance = type.__call__(cls, *args,**kw)
        return cls.__instance

---------------------------------------------------------------------------------------------------

class Global_Interface(object):
    def __init__(self, *k, **kw):
        self.valid = True
        try:
            self.initialize(*k, **kw)
        except:
            self.valid = False

    def initialize(self, *k, **kw):
        raise NotImplementedError

---------------------------------------------------------------------------------------------------

class Local_Interface_1(Global_Interface):
    def f(self):
        raise NotImplementedError


class Local_Interface_2(Global_Interface):
    def g(self):
        raise NotImplementedError

---------------------------------------------------------------------------------------------------

class MyClass_1(threading.Thread, Local_Interface_1):
    __metaclass__ = Singleton
    def initialize(self, x, y):
        threading.Thread.__init__(self)
        self.x = x
        self.y = y

        ... otras operaciones de inicializacion...

        self.valid = True

    def f(self):
    ... blah blah ...


=====================================================
[2]

 File "/usr/lib64/python2.4/threading.py", line 378, in __init__
   assert group is None, "group argument must be None for now"
AssertionError: group argument must be None for now
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20111212/b106b7de/attachment.html>


Más información sobre la lista de distribución Python-es