Pythonデコレータオーバーライド関数の引数

user1187968

関数の引数をオーバーライドするPythonデコレータを作成しようとしていますが、inner()関数内に何を配置するかが本当にわかりません。ここで引数を変更する適切な方法は何ですか?

  def override(*override_args, **override_kwargs): 
        def outer(f): 
            def inner(*args, **kwargs): 
                ...
                ...
            return inner
        return outer

    @override('Cat')
    def my_function(animal, **kwargs): 
        print animal
        print kwargs

    my_function('Mouse', k1='1', k2='10') 
バレンス
def override(*override_args, **override_kwargs):
    def outer(f):
        def inner(*args, **kwargs):
            min_args_length = min(len(args), len(override_args))
            args = list(args)
            for i in xrange(min_args_length):
                args[i] = override_args[i]
            kwargs.update(override_kwargs)
            return f(*args, **kwargs)
        return inner
    return outer

@override('Cat', 'male', k1='0')
def my_function(animal, **kwargs):
    print animal
    print kwargs

my_function('Mouse', k1='1', k2='10')

出力:

Cat
{'k2': '10', 'k1': '0'}

説明:

argsは、名前のないargsを含むタプルであり、最大でmin(len(args)、len(override_args))をオーバーライドできます。

kwargsは、キーと値のペアとして名前付き引数を含むdictです。override_kwargsをkwargsに更新するだけです

また、引数の順序の不一致を防ぐために、名前付き引数「kwargs」のみをオーバーライドすることを強くお勧めします。

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

デコレータから関数のサブ関数をオーバーライドしますか?

分類Dev

オプションの引数(関数)を使用したPythonデコレータ

分類Dev

Pythonの引数付きデコレータ関数

分類Dev

ポインタ引数による関数テンプレートのオーバーロード解決

分類Dev

JQuery関数をオーバーライドします(ロギングデコレータ)

分類Dev

インターフェイスの関数コールバック引数をオーバーライドする

分類Dev

コマンドライン引数を使用したNextflowパラメーターのオーバーライド

分類Dev

関数のオーバーライド

分類Dev

さまざまなデータ型の関数のオーバーライド

分類Dev

デコレータ内で引数を取るPythonラッパー関数

分類Dev

「__」関数のPythonの奇妙なオーバーライド動作

分類Dev

別の関数内で行われる関数呼び出しの引数のオーバーライド

分類Dev

Python 3.xを使用して、コールバックとその引数をラップされた関数からデコレータに渡す方法は?

分類Dev

HTMLParserのPythonオーバーライド可能関数

分類Dev

Pythonデコレータは関数の引数を取りません

分類Dev

Kotlin関数のオーバーロード(可変引数と単一パラメーター)

分類Dev

デコレータのラッパー関数を使用して関数の引数を変更する

分類Dev

関数への引数を変更するデコレータ

分類Dev

Scala Currying:部分関数による空の引数で関数をオーバーライドする

分類Dev

オーバーライド可能な引数タイプ

分類Dev

オーバーライドされたバインド関数に未定義の引数があります

分類Dev

インターフェイス引数による関数のオーバーロード

分類Dev

デフォルトの引数でPythonラップ静的メンバー関数のオーバーロードをブースト

分類Dev

関数オーバーライドの問題のワードプレス

分類Dev

AngularJS-オーバーライドディレクティブのコンパイル関数はリンク関数を呼び出しませんか?

分類Dev

C ++ gcc関数テンプレートのオーバーロードコンパイラの問題

分類Dev

オーバーロードされた関数のコンパイラバグ

分類Dev

Python-親クラスの引数をオーバーライドする

分類Dev

引数のベクトルのタイプによる関数のオーバーロード

Related 関連記事

  1. 1

    デコレータから関数のサブ関数をオーバーライドしますか?

  2. 2

    オプションの引数(関数)を使用したPythonデコレータ

  3. 3

    Pythonの引数付きデコレータ関数

  4. 4

    ポインタ引数による関数テンプレートのオーバーロード解決

  5. 5

    JQuery関数をオーバーライドします(ロギングデコレータ)

  6. 6

    インターフェイスの関数コールバック引数をオーバーライドする

  7. 7

    コマンドライン引数を使用したNextflowパラメーターのオーバーライド

  8. 8

    関数のオーバーライド

  9. 9

    さまざまなデータ型の関数のオーバーライド

  10. 10

    デコレータ内で引数を取るPythonラッパー関数

  11. 11

    「__」関数のPythonの奇妙なオーバーライド動作

  12. 12

    別の関数内で行われる関数呼び出しの引数のオーバーライド

  13. 13

    Python 3.xを使用して、コールバックとその引数をラップされた関数からデコレータに渡す方法は?

  14. 14

    HTMLParserのPythonオーバーライド可能関数

  15. 15

    Pythonデコレータは関数の引数を取りません

  16. 16

    Kotlin関数のオーバーロード(可変引数と単一パラメーター)

  17. 17

    デコレータのラッパー関数を使用して関数の引数を変更する

  18. 18

    関数への引数を変更するデコレータ

  19. 19

    Scala Currying:部分関数による空の引数で関数をオーバーライドする

  20. 20

    オーバーライド可能な引数タイプ

  21. 21

    オーバーライドされたバインド関数に未定義の引数があります

  22. 22

    インターフェイス引数による関数のオーバーロード

  23. 23

    デフォルトの引数でPythonラップ静的メンバー関数のオーバーロードをブースト

  24. 24

    関数オーバーライドの問題のワードプレス

  25. 25

    AngularJS-オーバーライドディレクティブのコンパイル関数はリンク関数を呼び出しませんか?

  26. 26

    C ++ gcc関数テンプレートのオーバーロードコンパイラの問題

  27. 27

    オーバーロードされた関数のコンパイラバグ

  28. 28

    Python-親クラスの引数をオーバーライドする

  29. 29

    引数のベクトルのタイプによる関数のオーバーロード

ホットタグ

アーカイブ