[Python-es] ¿ Injección de código con decoradores o herencia ?

Txema Vicente txema en nabla.net
Jue Oct 24 02:12:40 CEST 2013


Buenas.

Entiendo que lo que quieres es tener una clase base a la que inyectar
métodos para tener distintas maneras de proveer una funcionalidad F.

Te haces un decorador para añadir esos metodos al código de la clase
cuando se la instancie. Cada vez que instancies un B, Se crea un
Decor que te da una subclase llamada Wrapper. Tienes unos objetos B
en codigo que crean instancias de Wrapper. Asi que cuando yo haga un
repr(), nunca veré un B.

Por poder, se podrá, pero aun no veo el motivo para no hacerlo como
ya han dicho en el hilo por simple composicion: un atributo
B.provider = MySQLProvider()
que has inicializado en B.__init__("mysql") y llamas a B.provider.F()

O si queda bien el parentesco, haciendo una subclase: hay una
class B_MySQL(B) que implementa el método F().

No tengo claro por que no gusta, pero la herencia múltiple está ahí.
class B_MySQL(B, MySQLProviderMixin): pass

Y unas dudas colaterales:

* Por qué tanto setattr(objeto, "atributo", valor)?
   Si el nombre del atributo ya lo sabemos, para que usar la cadena si
   vale con objeto.atributo = valor

* Que tiene de malo el concepto de clase Mixin, que solo existe para
complementar a otra clase?


Agur.


------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20131024/0a445228/attachment.html>


Más información sobre la lista de distribución Python-es