[pyar] o bien __get_item__ apesta o yo no entiendo algo

Emiliano Dalla Verde Marcozzi edvm en fedoraproject.org
Mie Mayo 7 16:46:52 ART 2014


El 7 de mayo de 2014, 16:35, Felipe Lerena <felipelerena en gmail.com>escribió:

> Hola,
>
> (Para que "algunos" me dejen de decir Troll mando una pregunta de python a
> la lista de python)
>
> Estaba laburando una feature de Ojota y me acordé de algo que ya me topé
> una vez y que me habia parecido horriblemente mal manejado por python:
> cuando hago un override de __get_item__ puedo recibir 2 tipos diferenetes
> como el segundo parametro: o bien un int o un objeto slice...
>
> el resultado de un slice no es un Item sinó una serie de items que
> seguramente serán de un tipo diferente del que devuelvo cuando devuelvo uno
> solo, por lo que el método recibe 2 tipos de parámetros y devuelve 2 tipos
> de parámetros según el contexto
>
>
> el codigo de cada vez que haces esto queda quedando algo asi como:
>
>     def __getitem__(self, indexes):
>          # de movida no sabes como ponerle al parametro, si no sabes qué nombre ponerle hay algo mal
>          if isinstance(indexes, slice):            list_ = self._list[indexes]            ret = OjotaSet(self.ojota_class, list_)
>
>             #aca devuelvo un objeto del mismo tipo que estoy sliceando, como una lista que devuelve otra lista en el slice
>
>          else:            ret = self.ojota_class(**self._list[indexes])
>             # pero aca devuelvo un objeto de tipo Ojota de los cuales OjotaSet es un conjunto de los mismos        return ret
>
> (Copypasteado de
> https://bitbucket.org/msa_team/ojota/src/6637570c209581612549ebacf5b73edf0e346f79/ojota/base.py?at=default#cl-167<https://bitbucket.org/msa_team/ojota/src/1902f438c617f89d75f445bf681d7a13f9f99063/ojota/base.py?at=default#cl-167>con comentarios agregados)
>
> esto es horrible o soy yo que soy un hinchapelotas? Hay alguna mejor
> manera de manejar esto? como que no hay un __get_slice__? lo fixearon en
> python 3?
>
Buenas Troll, digo Lipe :)
O bien haces lo que estas haciendo (cuando te piden un elemento, te fijas
con isinstance y lo traes desde la instancia._list[]), o lo otro que se me
ocurre
es cuando vas a setear un atributo en OjotaSet, diferencias si es de tipo
slice o no y guardas
cada cosa en su lugar por su tipo (Ej,
OjotaSet.slices.append(minuevo_slice)).
Creo entender que OjotaSet guarda todo lo que le meten en OjotaSet._list

    def __setitem__(self, ii, val):        return self._list[ii]

Y por eso estas haciendo el isinstance en el __getitem__ :). Bueno, sé que
no ayude un pomo, pero esos fueron mis 2 ctvs.

-- 
"Code without tests is broken by design." - Jacob Kaplan-Moss
Broken code @ https://github.com/edvm
jabber: edvm en python.org.ar
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20140507/74b9c24a/attachment.html>


More information about the pyar mailing list