[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