El 7 de julio de 2015, 15:08, Antonio Roncero <[email protected]> escribió:
> > > El martes, 7 de julio de 2015, 11:59:56 (UTC+1), Antonio Roncero escribió: >> >> >> >> El martes, 7 de julio de 2015, 11:45:02 (UTC+1), Jordi Esteve >> (Zikzakmedia) escribió: >>> >>> On 07/07/15 12:28, Antonio Roncero wrote: >>> >>> Hola, sigo con mi iniciacion a la programacion. Ahora estoy con la >>> herencia. >>> >>> En openerp tenia 2 tipos de herencia >>> >>> - Herencia de clase: añadia campos que eran visibles en las vistas >>> de la clase original >>> - Herencia por prototipo: Creaba una nueva clase copiando las >>> propiedades de la clase padre >>> - Herencia polimorfica: permitia heredar de varias clases y creaba >>> una tabla nueva con la referencia al objeto de las clases heredadas y los >>> campos nuevos. >>> >>> En tryton, por lo que me ha parecido leer, solo hay una, que según he >>> entendido es una mezcla de las dos primeras de openerp, es decir añade >>> campos a la tabla original pero no se ven en la vista a no ser que la >>> creemos. >>> >>> >>> ¿Como se podria tener herencia de los tipos dos? es decir, una que me >>> cree un nuevo modelo (con su propio __name__) que herede los campos y >>> metodos del padre. Y del tipo 3, es decir, una que me permita heredar de >>> varias clases a la vez. >>> >>> >>> Los dos casos se pueden hacer usando la herencia de Python. Las >>> herencias de Tryton son simplemente las herencias que te proporciona el >>> propio lenguage python. >>> >>> Por ejemplo mírate el módulo account_bank que permite añadir cuentas >>> bancaris en facturas, apuntes contables, etc. Se define una clase base >>> BankMixin (por convenio llevan la palabra Mixin al final) donde defines >>> campos y métodos comunes y luego creas o amplias clases existentes a partir >>> de este Mixin: >>> >>> class Invoice(BankMixin): >>> class Line(BankMixin): >>> class CompensationMoveStart(ModelView, BankMixin): >>> >>> >> -- >>> Jordi Esteve >>> Consultor Zikzakmedia [email protected] >>> Mòbil 679 170 693 >>> >>> Zikzakmedia SL >>> St. Jaume, 9, baixos, 2a >>> 08720 Vilafranca del Penedès >>> Tel 93 890 2108 >>> >>> >> Gracias, le echo un vistazo. :D >> > > He estado mirando estos ejemplo y en todos se hereda de una clase definida > en el propio archivo. ¿Como tendria que hacer el import para heredar de una > clase de otro modulo? > > seria algo asi? > > from trytond.modules.party import Party > > No conozco ningún ejemplo real pero entiendo que sí. Después de importar Party así, podrías hacer algo como esto: Class InheritedParty(Party): __name__ = 'inherited.party' another_field = fields.Char('Another Field') etc. En teoría esto te crearía la tabla inherited_party con los mismos campos que party más los que añadas a esta. Otra opción que se me ocurre es: Class InheritedParty(ModelSQL, ModelView): __name__ = 'inherited.party' party = fields.Many2One('party.party', Party, required=True) Y luego sobreescribir el método __getattr__() como se hace en product [1] de forma que cada vez que hace referencia a un campo inexistente en ese modelo, lo va a buscar a party. [1] http://hg.tryton.org/modules/product/file/5bba92343654/product.py#l140 -- Jesús Martín Zikzakmedia SL C/ de Sant Jaume, 9, baixos, 2ª 08720 Vilafranca del Penedès ☏ 93 890 21 08
