[pyar] Clase que encapsula un atributo

Emiliano Reynares reynares.emiliano en gmail.com
Mie Abr 23 11:18:24 ART 2014


El caso de uso es similar al que se plantea en los modelos de Django. Cada
clase del dominio (o sea, creada por el usuario) posee un atributo de clase
que permite manipular los objetos de dicha clase. Algo así:

class Model:
    m = Manager()

class Foo(Model):
    pass

Luego, cada clase del dominio posee una instancia de Manager para manipular
sus objetos, y dicha instancia de Manager conoce la clase que la "posee"
como atributo. Espero sea clara la explicación!



2014-04-22 16:08 GMT-03:00 Ariel Gerardo Ríos <arielgerardorios en gmail.com>:

> Gracias Fisa.... me salieron a flote oscuros pasados :$
>
> Saludos.
>
>
> 2014-04-22 16:04 GMT-03:00 fisa <fisadev en gmail.com>:
>
> El día 22 de abril de 2014, 15:40, Ariel Gerardo Ríos
>> <arielgerardorios en gmail.com> escribió:
>> > Yo seguiría por el lado de la solución de Luis: las instancias creadas
>> en
>> > otros lados podrían tener un método que resetee el valor de parent para
>> que
>> > se acomoden al nuevo entorno:
>> >
>> > #!/usr/bin/env python
>> > # -*- coding: utf-8 -*-
>> >
>> >
>> > class A():
>> >     def __init__(self, parent=None):
>> >         self.set_parent(parent)
>> >
>> >     def set_parent(self, parent):
>> >         self.parent = parent
>> >
>> >     def get_parent(self):
>> >         return self.parent
>> >
>> >
>> > class B():
>> >     def __init__(self):
>> >         self.a = A(self.__class__)
>> >
>> >
>> > class C:
>> >     def __init__(self, a):
>> >         self.a = a
>> >         self.a.set_parent(self.__class__)
>> >
>> >
>> > if __name__ == '__main__':
>> >     b = B()
>> >     print b.a.get_parent()
>> >
>> >     c = C(b.a)
>> >     print c.a.get_parent()
>> >
>> >
>> >     Ejecutándolo tenés:
>> >
>> > $ python test.py
>> > __main__.B
>> > __main__.C
>> >
>> >
>> >     Pero todo depende de qué tanto acceso tengas a la definición de las
>> > clases para poder agregarles este método "set_parent()"
>> >
>> > Saludos.
>> >
>>
>> Un comentario sobre este ejemplo, no sobre el tema del hilo:
>>
>> En python no se suele hacer eso de tener getters y setters para algo
>> que es simplemente un atributo, no queda muy lindo y no se considera
>> "pythónico".
>> Para un atributo normal, basta con algo así:
>>
>> class A():
>>     def __init__(self, parent=None):
>>         self.parent = parent
>>
>> Fijate que es bastante menos código, y se usa simplemente así:
>>
>> a = A(algo_para_parent)
>> a.parent = otra_cosa_parent
>> print a.parent
>>
>> No hay necesidad de llamar a métodos para algo que es simplemente un
>> atributo.
>>
>> Y si se tuviese alguna lógica que ejecutar en el set o get de ese
>> atributo, se usan getters y setters pero "escondidos" en una property,
>> para que siga usándose sin tener que llamar a métodos. De esa forma si
>> tenés que "migrar" desde algo que antes no tenía lógica y ahora la
>> requiere, no hace falta que cambies nada de los lugares donde eso se
>> usa, porque la sintaxis sigue siendo la misma sin importar si tenés un
>> atributo, o una property con getters y setters.
>>
>> Saludos!
>>
>> --
>> fisa  -  Juan Pedro Fisanotti
>> _______________________________________________
>> pyar mailing list pyar en python.org.ar
>> http://listas.python.org.ar/listinfo/pyar
>>
>> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>>
>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
>> Argentina - http://www.usla.org.ar
>>
>
>
>
> --
> Ariel Gerardo Ríos
> linkedin <http://www.linkedin.com/pub/ariel-gerardo-rios/33/158/227> | *blog
> <http://www.ariel17.com.ar>*
>
> _______________________________________________
> pyar mailing list pyar en python.org.ar
> http://listas.python.org.ar/listinfo/pyar
>
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
> Argentina - http://www.usla.org.ar
>



-- 
Emiliano Reynares
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20140423/7fe14151/attachment.html>


More information about the pyar mailing list