[pyar] Herencia y métodos __ (double underscore)

Manuel Kaufmann humitos en gmail.com
Mar Mar 20 13:55:26 ART 2012


2012/3/20 Manuel Kaufmann <humitos en gmail.com>:
> Ahora que ya sé esto, sigo investigando porqué igualmente no funciona
> lo que quiero arreglar :S

El problema que tengo está relacionado con GTK básicamente. La cosa viene así

## window.py

class Window(gtk.Window):

    def __init__(self, **args):
        gtk.Window.__init__(self, **args)
        [.....]
        self.connect('key-press-event', self.__key_press_cb)

    def __key_press_cb(self, widget, event):
        # Do something that I DON'T WANT
        log.debug('Quiero que NO ME LLAMEN a mi!!')

[........]

## activity.py

class Activity(Window, gtk.Container):

     def __init__(self, handle, create_jobject=True):
        [...]
        Window.__init__(self)
        [...]


[.......]

## terminal.py

class TerminalActivity(activity.Activity):

    def __init__(self, handle):
        activity.Activity.__init__(self, handle)

    def __key_press_cb(self, widget, event):
        # Do the MAGIC here
        log.debug('Quiero que me llamen a mi!!')

[.......]


Dentro de la clase Window, cuando es llamada por TerminalActivity

 - self = <TerminalActivity object at 0x8ba8b6c (SugarActivity at 0x8b03970)>
 - self.__key_press_cb = <bound method TerminalActivity.__key_press_cb
of <TerminalActivity object at 0x8ba8b6c (SugarActivity at
0x8b03970)>>

Por lo que SUPUESTAMENTE se estarían conectando las señales de la
forma que yo quiero, aunque no pasa eso lamentablemente, sino que se
sigue conectando el __key_press_cb de Window en vez del de
TerminalActivity. No estoy seguro que esto tenga que ver con que los
métodos tengan double underscore al inicio.

Por otro lado, si en TerminalActivity.__init__ hago:

self.disconnect_by_func(self.__key_press_cb)

Me da un traceback:

TypeError: nothing connected to <bound method
TerminalActivity.__key_press_cb of <TerminalActivity object at
0x906db6c (SugarActivity at 0x8fc9170)>>

o

self.disconnect_by_func(TerminalActivity._TerminalActivity__key_press_cb)

Me dice:

TypeError: nothing connected to <unbound method TerminalActivity.__key_press_cb>

o

self.disconnect_by_func(Window._Window__key_press_cb)

El error es:

TypeError: nothing connected to <unbound method Window.__key_press_cb>


Entonces, por un lado no entiendo porqué no se conecta el método
__key_press_cb de mi clase TerminalActivity y por el otro tampoco
entiendo porqué no puedo desconectar __key_press_cb de Window (ya que
de alguna u otra forma se conecta por ese método se ejecuta y
funciona)

Saludos,

-- 
Kaufmann Manuel
Blog: http://humitos.wordpress.com/
Portfolio: http://fotos.mkaufmann.com.ar/
PyAr: http://www.python.com.ar/



More information about the pyar mailing list