[pyar] Extender una clase que tiene otra clase adentro (ej: Meta)
Ignacio Rossi
rossi.ignacio en gmail.com
Jue Mayo 26 10:30:38 ART 2016
Hola
El 26 de mayo de 2016, 10:11, Juanjo Conti <jjconti en gmail.com> escribió:
> Hola, seguro vieron este patrón en frameworks como Django o DRF:
>
> class A(framework.Model):
>
> class Meta:
>
> fields = ('a1', 'a2', 'a3')
>
> La pregunta es, como extender A y agregar elementos a fields?
>
> Lo hice así:
>
> class B(A):
> pass
>
> B.Meta.fields += ('b1', 'b2')
>
Guarda con esto, a priori esta modificación también afecta a A.Meta!
>>> class A:
... class Meta:
... fields = ('a', 'b', 'c')
...
>>> A.Meta.fields
('a', 'b', 'c')
>>> class B(A):
... pass
...
>>> B.Meta.fields += ('x', 'y', 'z')
>>> B.Meta.fields
('a', 'b', 'c', 'x', 'y', 'z')
>>> A.Meta.fields
('a', 'b', 'c', 'x', 'y', 'z')
porque A.Meta y B.Meta son la misma cosa.
No sé (pero tampoco creo) si DRF o Django hacen magia negra para evitar
esto.
Yo definiría explícito a B.Meta extendiendo a A.Meta:
class A:
class Meta:
fields = ('a', 'b', 'c')
class B(A):
class Meta(A.Meta):
fields = A.Meta.fields += ('x', 'y', 'z')
pero no tengo idea de si hay algo más estándar / buena práctica / lo que
sea.
Saludos
Ignacio
Hay otra forma conocido que sea más recomendada?
>
> Saludos!
>
> --
> Juanjo Conti
> Estoy trabajando en una nueva versión de mi blog en
> http://www.juanjoconti.com
>
> _______________________________________________
> 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
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20160526/0bb61774/attachment.html>
Más información sobre la lista de distribución pyar