当前位置 : 主页 > 手机开发 > 其它 >

oop – openERP(odoo)中的继承

来源:互联网 收集:自由互联 发布时间:2021-06-19
我是openERP的新手并接受采访.请解释openERP中不同类型继承的想法,我认为它共有3种类型.请从面试的角度以非常简单的方式解释. P.S:我熟悉简单继承的概念. 继承: 继承机制用于创建可
我是openERP的新手并接受采访.请解释openERP中不同类型继承的想法,我认为它共有3种类型.请从面试的角度以非常简单的方式解释.
P.S:我熟悉简单继承的概念. 继承:

继承机制用于创建可重用性的概念.可重用性意味着在任何面向对象的编程中重用父类的代码.

好处 :

>减少代码冗余.
>提供代码可重用性.
>减少源代码大小并提高代码可读性.
>代码易于管理,分为父类和子类.
>通过覆盖基类来支持代码可扩展性
子类中的功能.

缺点:

>在继承中,基类和子类紧密耦合.
因此,如果您更改父类的代码,它将受到影响
所有的儿童班.
>在类层次结构中,许多数据成员保持未使用状态和内存
分配给他们没有利用.因此影响你的表现
程序,如果您没有正确实现继承.

在OpenERP中有两种继承方式.

1.经典使用Pythonic方式:

它允许通过继承从orm.Model派生的类(如添加了goegraphic支持的geoModel)向Model添加特定的“通用”行为.

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.Polymorphic方式: –

使用_inherits: –

使用_inherits时,您将以数据库方式执行一种多态模型.

例如,product.product继承product.template或res.users继承res.partner.这意味着我们创建了一个模型,该模型可以获得模型的知识,但在新数据库表中添加了附加数据/列.因此,当您创建用户时,所有合作伙伴数据都存储在res_partner表中(并创建合作伙伴),并且所有与用户相关的信息都存储在res_users表中.

为此,我们使用dict:_inherits = {‘res.partner’:’partner_id’}该键对应于基本模型和基本模型的外键值.

同样通过XML你可以继承Odoo视图(如表单视图,树视图,搜索视图等),你也可以从视图中更改行为

关键点 :

上述两种方法可以应用于Odoo服务器端,您可以在其中更改现有视图的行为或您可以在Odoo中更改的任何其他内容在客户端查看效果.

我希望这对你有帮助..

网友评论