[python-madrid] Problema con __getattr__

Vicente Ruiz vruiz2.0 at gmail.com
Thu Apr 12 09:30:18 CEST 2012


Coincido con Andrei :)

En cuanto a lo que comentas, Manuel, no puedes llamar al padre usando
old-style, la que estarías mezclando objetos y tipos. Para mantener la
interfaz de getattr funciona así:

class EasyDict:
    def __init__(self):
        self._values = {}

    def add(self, k, v):
        self._values[k] = v

    def __getattr__(self, name):
        if name in self._values:
            return self._values[name]
        raise AttributeError

    def __str__(self):
        return str(self._values)

y creo que te referías a este otro cuando hablas de llamar al padre:

class EasyDict(dict):
    def add(self, k, v):
        self[k] = v

    def __getattr__(self, name):
        try:
            return super(EasyDict, self).__geattr__(name)
        except AttributeError:
            if name in self:
                return self[name]
            raise AttributeError

al estar extendiendo un diccionario propiamente dicho, aquí si puedes hacer
la llamada al padre.

Un saludo,
Vicente Ruiz

El 12 de abril de 2012 09:23, Andrey Antoukh <andsux at gmail.com> escribió:

> Usar oldclass hoy en día debe ser un crimen penal! xD
>
> Andrei. ;)
>
> El 12 de abril de 2012 09:13, Manuel de la Peña <etil15 at gmail.com>escribió:
>
>
>> On Apr 12, 2012 8:54 AM, "Vicente Ruiz" <vruiz2.0 at gmail.com> wrote:
>> >
>> > Hola Miguel Ángel,
>> >
>> > es una pregunta muy buena :) La verdad es que me ha costado un rato dar
>> con el problema. Prueba cambiar esto:
>> >
>> > class EasyDict: --> class EasyDict(object):
>> >
>> > Esto se debe a que en las versiones anteriores a Python 3.x existen 2
>> tipos de clases: new-style y old-style. Esto desaparece en Python 3, siendo
>> todas new-style. Puedes leer más sobre el tema aquí:
>> http://docs.python.org/reference/datamodel.html#new-style-and-classic-classes
>> >
>> > Un saludo,
>> > Vicente Ruiz
>>
>> Buenas,
>>
>> Acá van mis 2c, la implementación no es totalmente correcta ya que tiene
>> los siguientes fallos:
>>
>> 1. Estas devolviendo None cuando el valor no está en el dict. Esto rompe
>> la interfaz de getattr, lo correcto sería lanzar la excepción AtributeError.
>> 2. No estas llamando al getattr del parental class cosa que es
>> probablemente recomendable, yo haría algo como:
>>
>> def __getattr__(self, name):
>>     try:
>>         return super(Easydict, self).__geattr__(name)
>>     except AttributeError:
>>         if name in self.dict:
>>             return self.dict [name]
>>         raise AttributeError
>>
>> Creo recordar que si era un new class puedes usar super de está forma,
>> pero no lo he probado por que estoy en el metro : P.
>>
>> Saludos
>>
>> >
>> > El 12 de abril de 2012 08:25, Kiko <kikocorreoso at gmail.com> escribió:
>> >
>> >>
>> >>
>> >> El 12 de abril de 2012 07:58, Miguel Angel <
>> miguelangel.garcia at gmail.com> escribió:
>> >>
>> >>> Hola!
>> >>>
>> >>> Tengo un problema y no sabía muy bien dónde preguntar... No sé si
>> esta lista se utiliza sólo para las reuniones o las preguntas también
>> tienen cabida.
>> >>
>> >>
>> >> A priori no hay ningún problema con las preguntas pero la finalidad de
>> esta lista es un poco de organización de python-madrid, las quedadas y
>> cosas así.
>> >>
>> >> Seguro que muchos de esta lista te podrán responder pero para el
>> futuro es más adecuado que para las dudas técnicas de python acudas a:
>> >>
>> >>  -la lista python-es  (
>> http://mail.python.org/mailman/listinfo/python-es).
>> >>  -a python.majibu (http://python.majibu.org/)
>> >>
>> >> Donde hay mucha más gente que en esta lista y cuyo objetivo es ese,
>> resolver dudas técnicas
>> >>
>> >> Saludos.
>> >>
>> >> --
>> >> Grupo de usuarios de python ubicados en Madrid
>> >> http://groups.google.es/group/python-madrid
>> >> http://python-madrid.es
>> >> http://twitter.com/#!/python_madrid
>> >> Para darte de baja del grupo envía un mensaje a
>> python-madrid+unsubscribe at googlegroups.com
>> >
>> >
>> >
>> >
>> > --
>> > Disponible en:
>> >
>> > http://www.vicenteruiz.es/
>> > http://www.menudoproblema.es/
>> > Twitter - LinkedIn
>> >
>> > --
>> > Grupo de usuarios de python ubicados en Madrid
>> > http://groups.google.es/group/python-madrid
>> > http://python-madrid.es
>> > http://twitter.com/#!/python_madrid
>> > Para darte de baja del grupo envía un mensaje a
>> python-madrid+unsubscribe at googlegroups.com
>>
>>  --
>> Grupo de usuarios de python ubicados en Madrid
>> http://groups.google.es/group/python-madrid
>> http://python-madrid.es
>> http://twitter.com/#!/python_madrid
>> Para darte de baja del grupo envía un mensaje a
>> python-madrid+unsubscribe at googlegroups.com
>>
>
>
>
> --
> Andrei Antoukh - <niwi at niwi.be>
> http://www.niwi.be/page/about/
> http://www.kaleidos.net/A5694F/
>
> "Linux is for people who hate Windows, BSD is for people who love UNIX"
> "Social Engineer -> Because there is no patch for human stupidity"
>
> --
> Grupo de usuarios de python ubicados en Madrid
> http://groups.google.es/group/python-madrid
> http://python-madrid.es
> http://twitter.com/#!/python_madrid
> Para darte de baja del grupo envía un mensaje a
> python-madrid+unsubscribe at googlegroups.com
>



-- 
*Disponible en:*

http://www.vicenteruiz.es/
http://www.menudoproblema.es/ <http://es.linkedin.com/in/alvarohurtado>
Twitter <http://twitter.com/menudoproblema> -
LinkedIn<http://es.linkedin.com/in/vicenteruiz>

-- 
Grupo de usuarios de python ubicados en Madrid
http://groups.google.es/group/python-madrid
http://python-madrid.es
http://twitter.com/#!/python_madrid
Para darte de baja del grupo envía un mensaje a python-madrid+unsubscribe at googlegroups.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.es.python.org/pipermail/madrid/attachments/20120412/9cdaba0b/attachment.html>


More information about the Madrid mailing list