python - Odoo中如何继承一个纯Python类来修改一个方法?

标签 python python-2.7 odoo-8 odoo

我必须修改 Odoo 中的一个方法。问题是包含该方法的类没有像往常一样声明(它没有使用 Odoo API),所以我不知道如何模拟 Odoo API 的 _inherit 参数。

这是包含方法的类(模块是 account_financial_report_webkit,来自 OCA):

...
from openerp.addons.account.report.common_report_header \
    import common_report_header

class CommonReportHeaderWebkit(common_report_header):
    ...

我要修改的方法是这个(它在 CommonReportHeaderWebkit 类中):

def is_initial_balance_enabled(self, main_filter):
    if main_filter not in ('filter_no', 'filter_year', 'filter_period'):
        return False
    return True

为了覆盖它,我在自定义模块中进行了猴子修补:

from openerp.addons.account_financial_report_webkit.report.common_reports \
    import CommonReportHeaderWebkit

def is_initial_balance_enabled(self, main_filter):
    if main_filter not in ('filter_no', 'filter_date', 'filter_period'):
        return False
    return True

CommonReportHeaderWebkit.is_initial_balance_enabled = is_initial_balance_enabled

这工作正常,但问题是这样我覆盖了整个方法,我想使用 super,因为现在我必须用其他方法做同样的事情,我可以'覆盖它的整个代码。

有谁知道如何以正确的方式做到这一点?

最佳答案

我不是 python 专家,但据我所知,方法可以 用作对象,所以我认为这会起作用。

    from openerp.addons.account_financial_report_webkit.report.common_reports \
        import CommonReportHeaderWebkit

    # first keep reference to the original method before you lose it.
    _super_is_initial_balance_enabled = CommonReportHeaderWebkit.is_initial_balance_enabled

    def is_initial_balance_enabled(self, main_filter):
        # execute it like super
        return _super_is_initial_balance_enabled(self, main_filter)

    CommonReportHeaderWebkit.is_initial_balance_enabled = is_initial_balance_enabled

关于python - Odoo中如何继承一个纯Python类来修改一个方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49048167/

相关文章:

python - 在 Visual Studio Code 中调试 Flask (Python) Web 应用程序

python - easy-install.pth 和 *.egg-link 中冗余条目背后的动机是什么?

python - 如何使用 scrapy 和 python 动态抓取 Tripadvisor

python-2.7 - Tensorboard - add_summary 使我的代码崩溃

python - 自定义 account.move 上的语法错误 'date' 字段 - Odoo v8

openerp - 我如何完全删除 Odoo/OpenERP 上的 "follow"功能?

python - Python 3.6 中带有元组的格式化字符串文字

python - 可变函数参数默认值的好用途?

javascript - 如何检查 Odoo 中的用户是否属于多个组?

python - 如何在 Keras API 中将数组列表作为输入