[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