gpt4 book ai didi

python - Odoo 中的覆盖基方法是好的选择吗?

转载 作者:太空宇宙 更新时间:2023-11-04 09:49:54 25 4
gpt4 key购买 nike

我在我的自定义模块中创建了一个新方法,我想在用户点击销售订单中的按钮 confirm 时使用我的方法。所以我进行了研究并找到了完成这项工作的简单解决方案。

  • 重写基本方法。在这种情况下,sale.py 中的方法 action_confirm() 使用 super() 方法。

所以我只是想知道,这是正确的方法吗?还有比这更好的解决方案吗?请给我建议。

最佳答案

覆盖任何方法的最好方法是使用 super() , 以执行旧功能并避免破坏其他模块方法的功能,这些方法也会覆盖该源方法。如果你这样做,你就做得很好。但有时您会发现无法使用 super() 的情况。你需要复制源代码来修改里面的任何东西。在这些情况下,您必须小心并注意您正在覆盖的内容。

Example A

  • 你有基本方法action_confirm() ,由 sale 创建模块。
  • 您安装了一个名为 sale_extension 的模块,它会覆盖 action_confirm()使用 super() 的方法.
  • 然后你安装你的自定义模块,你也覆盖了action_confirm()super() .
  • 何时action_confirm()被调用,它将执行sale , sale_extension以及您的模块功能。

Example B

  • 你有基本方法action_confirm() ,由 sale 创建模块。
  • 您安装了一个名为 sale_extension 的模块,它会覆盖 action_confirm()使用 super() 的方法.
  • 然后你安装你的自定义模块,你也覆盖了action_confirm()没有super() , 所以你已经复制了 action_confirm() 的源代码并对其进行了修改。
  • 何时action_confirm()被调用,它将执行sale和你的模块功能,但不是 sale_extension一个。
  • 所以你应该先理解然后添加由sale_extension引入的代码在您复制的源代码中,然后对其进行修改。
  • 这种情况的问题是您可以安装的 future 模块,如果它们覆盖了action_confirm()。 ,您的代码将忽略他们的更改。

所以结论是如果你使用super() ,您在安装新模块时不一定会遇到问题(尽管在某些情况下即使使用 super() ,您也必须修改代码以使其适应新安装的模块功能)。

关于python - Odoo 中的覆盖基方法是好的选择吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48199519/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com