【发布时间】:2015-08-23 02:32:18
【问题描述】:
我是openERP的新手,正在面试。请解释openERP中不同类型继承的想法,我认为共有3种类型。请从面试的角度用非常简单的方式解释一下。
P.S:我熟悉简单继承的概念。
【问题讨论】:
标签: oop openerp odoo openerp-7 openerp-8
我是openERP的新手,正在面试。请解释openERP中不同类型继承的想法,我认为共有3种类型。请从面试的角度用非常简单的方式解释一下。
P.S:我熟悉简单继承的概念。
【问题讨论】:
标签: oop openerp odoo openerp-7 openerp-8
继承:
继承机制用于创造可重用的思想。可重用意味着在任何面向对象编程中重用父类的代码。
优点:
缺点:
在继承中基类和子类是紧密耦合的。 因此,如果您更改父类的代码,它将受到影响 所有子类。
在类层次结构中,许多数据成员仍未使用,内存 分配给他们的没有使用。因此影响你的表现 如果您没有正确实现继承,请编写程序。
OpenERP中有两种继承方式。
1.Classical 使用 Pythonic 方式:
它允许通过继承派生自 orm.Model 的类向模型添加特定的“通用”行为,例如添加地理支持的 geoModel。
class Myclass(GeoModel, AUtilsClass):
使用 _inherit:-
主要目标是添加新行为/扩展现有模型。例如,您想向发票添加新字段并添加新方法
class AccountInvoice(orm.Model):
_inherit = "account.invoice"
_column = {'my_field': fields.char('My new field')}
def a_new_func(self, cr, uid, ids, x, y, context=None):
# my stuff
return something
覆盖现有方法:
def existing(self, cr, uid, ids, x, y, z, context=None):
parent_res = super(AccountInvoice, self).existing(cr, uid, ids, x, y, z, context=context)
# my stuff
return parent_res_plus_my_stuff
2.多态方式:-
使用 _inherits:-
当使用_inherits时你会以数据库的方式做一种多态模型。
例如product.product 继承 product.template 或res.users 继承 res.partner。这意味着我们创建了一个模型,它了解模型的知识,但在新的数据库表中添加额外的数据/列。因此,当您创建用户时,所有合作伙伴数据都存储在res_partner 表中(并创建了一个合作伙伴),所有用户相关信息都存储在res_users 表中。
为此,我们使用dict: _inherits = {'res.partner': 'partner_id'} 键对应基本模型,值对应基本模型的外键。
同样通过 XML,您可以继承 Odoo 视图(如表单视图、树视图、搜索视图等),您还可以从视图更改行为
重点:
以上两种方法可以应用于 Odoo 服务器端,您可以更改现有视图的行为或您可以在 Odoo 视图中更改的任何其他内容,以在客户端产生效果。
我希望这对你有帮助..:)
【讨论】: