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

Manuel Kaufmann humitos en gmail.com
Mar Mar 20 13:10:28 ART 2012


Hola lista,

Estoy tratando de resolver un bug de OLPC[1] y me encontré con un
problema de herencia. No estoy seguro si es así como debería funcionar
o estoy meando afuera del tarro o encontré un bug de Python o he
quemado demasiadas neuronas ya.

La cosa es así: tengo una clase Hola que tiene un método "__me_voy" y
una clase Chau que también tiene un método "__me_voy". Chau hereda de
Hola y en el __init__ de Hola se llama a self.__me_voy. ¿Cuál se
debería llamar ahí el de Chau o el de Hola? Para mí el de Chau, pero
para Python (que siempre sabe más que yo) dice que se debe llamar el
de Hola.

Acá el ejemplo en código:

[humitos] [/tmp]$ cat test.py
class Hola:
    def __init__(self):
        print 'Hola'
        self.__me_voy()

    def __me_voy(self):
        print 'Hola - me voy'


class Chau(Hola):
    def __init__(self):
        Hola.__init__(self)

    def __me_voy(self):
        print 'Chau - me voy'

if __name__ == '__main__':

    c = Chau()

[humitos] [/tmp]$ python test.py
Hola
Hola - me voy
[humitos] [/tmp]$


Otra cosa que probé fue cambiar el Hola.__init__(self) de la clase Chau por:

super(Chau, self).__init__()

y recibo este error:

[humitos] [/tmp]$ python test.py
Traceback (most recent call last):
  File "test.py", line 24, in <module>
    c = Chau()
  File "test.py", line 16, in __init__
    super(Chau, self).__init__()
TypeError: must be type, not classobj
[humitos] [/tmp]$

¿Hay algún alma caritativa que me tire una data sobre esto?

Muchas gracias,

[1] http://bugs.sugarlabs.org/ticket/440

-- 
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