[pyar] Clase que encapsula un atributo

fisa fisadev en gmail.com
Mar Abr 22 16:04:56 ART 2014


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


More information about the pyar mailing list