【问题标题】:Inheritance in openERP (odoo)openERP(odoo)中的继承
【发布时间】:2015-08-23 02:32:18
【问题描述】:

我是openERP的新手,正在面试。请解释openERP中不同类型继承的想法,我认为共有3种类型。请从面试的角度用非常简单的方式解释一下。
P.S:我熟悉简单继承的概念。

【问题讨论】:

    标签: oop openerp odoo openerp-7 openerp-8


    【解决方案1】:

    继承:

    继承机制用于创造可重用的思想。可重用意味着在任何面向对象编程中重用父类的代码。

    优点:

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

    缺点:

    1. 在继承中基类和子类是紧密耦合的。 因此,如果您更改父类的代码,它将受到影响 所有子类。

    2. 在类层次结构中,许多数据成员仍未使用,内存 分配给他们的没有使用。因此影响你的表现 如果您没有正确实现继承,请编写程序。

    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.templateres.users 继承 res.partner。这意味着我们创建了一个模型,它了解模型的知识,但在新的数据库表中添加额外的数据/列。因此,当您创建用户时,所有合作伙伴数据都存储在res_partner 表中(并创建了一个合作伙伴),所有用户相关信息都存储在res_users 表中。

    为此,我们使用dict: _inherits = {'res.partner': 'partner_id'} 键对应基本模型,值对应基本模型的外键。

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

    重点:

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

    我希望这对你有帮助..:)

    【讨论】:

    • 您错过了 odoo 文档中提到的第三个。它不是真正的继承,而是通过结合 _inherit 和 _name 来复制模型属性。也许你也应该提到它? :-)
    • 我们可以同时使用 _inherits 和 _inherit 吗? @DASADIYACHAITANYA
    • 根据我们的使用情况我们选择_inherit或_inherits,两者都没有不同
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-14
    • 1970-01-01
    • 1970-01-01
    • 2023-01-30
    • 2012-10-20
    • 2021-11-20
    • 1970-01-01
    相关资源
    最近更新 更多