Muchas gracias !!<br><br><br><br><div class="gmail_quote">El 12 de diciembre de 2011 20:29, Anler Hernandez Peral <span dir="ltr">&lt;<a href="mailto:anler86@gmail.com">anler86@gmail.com</a>&gt;</span> escribió:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hola Jose<div><br></div><div>El problema está en que al crear una instancia de tu clase: </div><div><br></div><div>instance = MyClass_1(&#39;x&#39;, &#39;y&#39;) </div><div><br></div><div>se están ejecutando los métodos __init__ de cada clase de la jerarquía en un cierto orden (esto se llama method resolution order o mro), dicho orden lo puedes ver para MyClass_1 de la siguiente forma:</div>


<div><br></div><div>MyClass_1.mro()</div><div><br></div><div>lo cual a mi me da como resultado:</div><div><br></div><div>







<p>[&lt;class &#39;__main__.MyClass_1&#39;&gt;, &lt;class &#39;threading.Thread&#39;&gt;, &lt;class &#39;threading._Verbose&#39;&gt;, &lt;class &#39;__main__.Local_Interface_1&#39;&gt;, &lt;class &#39;__main__.Global_Interface&#39;&gt;, &lt;type &#39;object&#39;&gt;]</p>


<p><br></p><p>que significa esto? que el primer __init__ que se buscara será el de MyClass_1, y luego el threading.Thread, etc, entonces, al no tener __init__ MyClass_1, se invoca el de threading.Thread pasandole los argumentos &#39;x&#39;, &#39;y&#39; que pasamos al crear nuestra instancia y justamente aqui es donde falla porque Thread se queja sobre el primer parametro de posicion que debe ser None</p>


<p>Solucion: simplemente debes definir correctamente tu herencia para que se ejecuten las inicializaciones en el orden que desees:</p><p>cambia</p><p>class MyClass_1(threading.Thread, Local_Interface_1):</p>

<p>por</p><p>class MyClass_1(Local_Interface_1, threading.Thread):</p><p>de esta forma el mro quedara asi:</p><p>







</p><p>[&lt;class &#39;__main__.MyClass_1&#39;&gt;, &lt;class &#39;__main__.Local_Interface_1&#39;&gt;, &lt;class &#39;__main__.Global_Interface&#39;&gt;, &lt;class &#39;threading.Thread&#39;&gt;, &lt;class &#39;threading._Verbose&#39;&gt;, &lt;type &#39;object&#39;&gt;]</p>


<p><br></p><p></p>--<br>anler<br>
<br><br><div class="gmail_quote">2011/12/13 Jose Caballero <span dir="ltr">&lt;<a href="mailto:jcaballero.hep@gmail.com" target="_blank">jcaballero.hep@gmail.com</a>&gt;</span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div><div></div><div class="h5">

Hola, <br><br><br><br>por una seria de razones (llamémosle exigencias del guión&quot;), tenga una jerarquía de clases heredadas unas de otras.<br>Una version simplificada del código es [1].<br><br>-- Necesito que la clase con la que voy a trabajar, MyClass_1, sea un &quot;singleton&quot; y a la vez un &quot;thread&quot;.<br>



<br>-- Al mismo tiempo esa clase debe tener una interfaz que se define en Local_Interface_1<br><br>-- Y es importante que se sepa si los objetos de esa clase son creados de forma adecuada o no. <br>Para asegurarme de ello, he intentado que la clase &quot;madre de todas las clases&quot;, Globa_Interface, <br>



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.<br><br><br>Obtengo este error [2].<br>Por lo que he podido &quot;debuggear&quot; parece ser que con esta jerarquía de clases la línea threading.Thread.__init__(self) nunca llega a ejecutarse. <br>



¿Alguna idea de la razón?<br><br><br><br>Muchas gracias por adelantado. Cualquier comentario será bienvenido.<br>Jose<br><br><br>=====================================================<br>[1]<br><br>class Singleton(type):<br>



    def __init__(cls, name, bases, dct):<br>        cls.__instance = None<br>        type.__init__(cls, name, bases, dct)<br>    def __call__(cls, *args, **kw):<br>        if cls.__instance is None:<br>            cls.__instance = type.__call__(cls, *args,**kw)<br>



        return cls.__instance<br><br>---------------------------------------------------------------------------------------------------<br><br>class Global_Interface(object):<br>    def __init__(self, *k, **kw):<br>        self.valid = True<br>



        try:<br>            self.initialize(*k, **kw)<br>        except:<br>            self.valid = False<br><br>    def initialize(self, *k, **kw):<br>        raise NotImplementedError<br><br>---------------------------------------------------------------------------------------------------<br>



<br>class Local_Interface_1(Global_Interface):<br>    def f(self):<br>        raise NotImplementedError<br><br><br>class Local_Interface_2(Global_Interface):<br>    def g(self):<br>        raise NotImplementedError<br><br>



---------------------------------------------------------------------------------------------------<br><br>class MyClass_1(threading.Thread, Local_Interface_1):<br>    __metaclass__ = Singleton<br>    def initialize(self, x, y):<br>



        threading.Thread.__init__(self)<br>        self.x = x<br>        self.y = y<br><br>        ... otras operaciones de inicializacion...<br><br>        self.valid = True<br><br>    def f(self):<br>    ... blah blah ...<br>



<br><br>=====================================================<br>[2]<br><br> File &quot;/usr/lib64/python2.4/threading.py&quot;, line 378, in __init__<br>   assert group is None, &quot;group argument must be None for now&quot;<br>



AssertionError: group argument must be None for now<br><br>
<br></div></div>_______________________________________________<br>
Python-es mailing list<br>
<a href="mailto:Python-es@python.org" target="_blank">Python-es@python.org</a><br>
<a href="http://mail.python.org/mailman/listinfo/python-es" target="_blank">http://mail.python.org/mailman/listinfo/python-es</a><br>
FAQ: <a href="http://python-es-faq.wikidot.com/" target="_blank">http://python-es-faq.wikidot.com/</a><br>
<br></blockquote></div><br></div>
<br>_______________________________________________<br>
Python-es mailing list<br>
<a href="mailto:Python-es@python.org">Python-es@python.org</a><br>
<a href="http://mail.python.org/mailman/listinfo/python-es" target="_blank">http://mail.python.org/mailman/listinfo/python-es</a><br>
FAQ: <a href="http://python-es-faq.wikidot.com/" target="_blank">http://python-es-faq.wikidot.com/</a><br>
<br></blockquote></div><br>