Odooの純粋なPythonクラスから継承してメソッドを変更するにはどうすればよいですか?

洗う

Odooのメソッドを変更する必要があります。問題は、メソッドを含むクラスが通常どおりに宣言されていない(Odoo APIを使用していない)ため_inherit、OdooAPIのパラメーターをエミュレートする方法がわからないことです。

これは、メソッドを含むクラスです(モジュールは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メソッド全体を上書きしていることです。他のメソッドでも同じことを行う必要があり、コード全体を上書きできないため、を使用したいと思います。

誰かがこれを正しい方法で行う方法を知っていますか?

チャリフDZ

私は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

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

C ++の継承されたクラスで通常のメソッドを静的メソッドに変更するにはどうすればよいですか?

分類Dev

プライベートに継承されたメソッドを使用して純粋仮想メソッドをオーバーライドするにはどうすればよいですか?

分類Dev

defaultdictを継承し、そのコピーメソッドをサブクラスメソッドで使用するにはどうすればよいですか?

分類Dev

Python 2で継承せずに別のクラスのメソッドを再利用するにはどうすればよいですか?

分類Dev

EasyMockで抽象クラスから継承されたメソッドをモックするにはどうすればよいですか?

分類Dev

Grails [Groovy]、継承されたメソッドなしでクラスが持つすべてのメソッドのリストを取得するにはどうすればよいですか?

分類Dev

Groovyで継承されたメソッドなしでクラスのすべてのメソッド名を取得するにはどうすればよいですか?

分類Dev

クローズドソースクラスを変更して、内のメソッドを操作するにはどうすればよいですか?

分類Dev

Pythonで継承されたクラスではなく、現在のクラスのインスタンスを返すようにメソッドを定義するにはどうすればよいですか?

分類Dev

Rubyの継承された親メソッドでChildクラスを取得するにはどうすればよいですか?

分類Dev

純粋なCSSを使用して現在のステータスを確認しながらクリック時に画像を変更するにはどうすればよいですか?

分類Dev

PHPのクラス継承で親メソッドのみを実行するにはどうすればよいですか?

分類Dev

C#別のクラスとスレッドの静的メソッドからtextbox.Textを変更するにはどうすればよいですか?

分類Dev

同じメソッドと継承で2つのクラスを作成するにはどうすればよいですか?

分類Dev

AからBを継承しながら、BからクラスAを継承するにはどうすればよいですか?

分類Dev

すべての変数を親クラスからinit関数を持つ基本クラスに継承するにはどうすればよいですか?

分類Dev

mongodbオブジェクトを更新して、純粋な配列のKey-Valueの配列を変更するにはどうすればよいですか?

分類Dev

継承されたクラスの配列リストからアイテムを変更するにはどうすればよいですか?

分類Dev

継承されたクラスの変数が何かに等しいときにメソッドを実行するにはどうすればよいですか?

分類Dev

クラスメソッドを変更するにはどうすればよいですか?

分類Dev

Pythonの子クラスの変更を最小限に抑えて、親__init __()から継承された属性をわずかに変更するにはどうすればよいですか?

分類Dev

サブクラスで継承されたAPIメンバーの名前を変更するにはどうすればよいですか?

分類Dev

initメソッドの継承を禁止するにはどうすればよいですか?

分類Dev

LuaBridgeを使用して同じクラスから継承された2つのクラスを登録するにはどうすればよいですか?

分類Dev

android:クラス外のメソッドから背景色を変更するにはどうすればよいですか?

分類Dev

クラスのすべてのメソッドをアクティブ化しないようにするにはどうすればよいですか?

分類Dev

継承クラスのメソッド実装を強制して、独自の埋め込みを呼び出す前にベースメソッドを呼び出すにはどうすればよいですか?

分類Dev

他のクラスから継承しないクラスを作成するにはどうすればよいですか?

分類Dev

super()を使用して、複数の父親クラスから特定のクラスを継承するにはどうすればよいですか?

Related 関連記事

  1. 1

    C ++の継承されたクラスで通常のメソッドを静的メソッドに変更するにはどうすればよいですか?

  2. 2

    プライベートに継承されたメソッドを使用して純粋仮想メソッドをオーバーライドするにはどうすればよいですか?

  3. 3

    defaultdictを継承し、そのコピーメソッドをサブクラスメソッドで使用するにはどうすればよいですか?

  4. 4

    Python 2で継承せずに別のクラスのメソッドを再利用するにはどうすればよいですか?

  5. 5

    EasyMockで抽象クラスから継承されたメソッドをモックするにはどうすればよいですか?

  6. 6

    Grails [Groovy]、継承されたメソッドなしでクラスが持つすべてのメソッドのリストを取得するにはどうすればよいですか?

  7. 7

    Groovyで継承されたメソッドなしでクラスのすべてのメソッド名を取得するにはどうすればよいですか?

  8. 8

    クローズドソースクラスを変更して、内のメソッドを操作するにはどうすればよいですか?

  9. 9

    Pythonで継承されたクラスではなく、現在のクラスのインスタンスを返すようにメソッドを定義するにはどうすればよいですか?

  10. 10

    Rubyの継承された親メソッドでChildクラスを取得するにはどうすればよいですか?

  11. 11

    純粋なCSSを使用して現在のステータスを確認しながらクリック時に画像を変更するにはどうすればよいですか?

  12. 12

    PHPのクラス継承で親メソッドのみを実行するにはどうすればよいですか?

  13. 13

    C#別のクラスとスレッドの静的メソッドからtextbox.Textを変更するにはどうすればよいですか?

  14. 14

    同じメソッドと継承で2つのクラスを作成するにはどうすればよいですか?

  15. 15

    AからBを継承しながら、BからクラスAを継承するにはどうすればよいですか?

  16. 16

    すべての変数を親クラスからinit関数を持つ基本クラスに継承するにはどうすればよいですか?

  17. 17

    mongodbオブジェクトを更新して、純粋な配列のKey-Valueの配列を変更するにはどうすればよいですか?

  18. 18

    継承されたクラスの配列リストからアイテムを変更するにはどうすればよいですか?

  19. 19

    継承されたクラスの変数が何かに等しいときにメソッドを実行するにはどうすればよいですか?

  20. 20

    クラスメソッドを変更するにはどうすればよいですか?

  21. 21

    Pythonの子クラスの変更を最小限に抑えて、親__init __()から継承された属性をわずかに変更するにはどうすればよいですか?

  22. 22

    サブクラスで継承されたAPIメンバーの名前を変更するにはどうすればよいですか?

  23. 23

    initメソッドの継承を禁止するにはどうすればよいですか?

  24. 24

    LuaBridgeを使用して同じクラスから継承された2つのクラスを登録するにはどうすればよいですか?

  25. 25

    android:クラス外のメソッドから背景色を変更するにはどうすればよいですか?

  26. 26

    クラスのすべてのメソッドをアクティブ化しないようにするにはどうすればよいですか?

  27. 27

    継承クラスのメソッド実装を強制して、独自の埋め込みを呼び出す前にベースメソッドを呼び出すにはどうすればよいですか?

  28. 28

    他のクラスから継承しないクラスを作成するにはどうすればよいですか?

  29. 29

    super()を使用して、複数の父親クラスから特定のクラスを継承するにはどうすればよいですか?

ホットタグ

アーカイブ