関数オーバーロード?簡単には、対応する関数を呼び出す、同じ名前を持つ支持複数の機能が定義されていることを理解するが、異なる数または種類のパラメータの、呼び出し時に、またはパラメータの種類に基づいて、インタプリタの数。
Pythonの関数のパラメータは非常に柔軟性があり、我々はこのように、同じ機能を実現するための関数を定義することができます
>>> defの FUNC(* 引数): ... 場合 lenは(引数)== 1 : ... 印刷(' 1つのパラメータ' ) ... elifの LEN(引数)== 2 : ... 印刷(" 二つのパラメータ' ) ... elifの LEN(引数)== 3 : ... プリント(' 3つのパラメータ' ) ... 他に: ... 印刷(' エラー" ) ... >>> FUNC(1 ) 1つのパラメータ >>> FUNC(1、2 ) 2つのパラメータ >>> FUNC(1、2、3 ) 3つのパラメータ >>> FUNC(1、2、3、4 ) エラー
Pythonは、同様の機能を実現するためにfunctools.singledispatchデコレータを利用することができます
functools インポートsingledispatch @singledispatch DEF :FUNC() プリント(F ' その他:{} ' ) @ func.register(INT) DEF _(): プリント(F ' のInt:{} ' ) @funcを。レジスタ(フロート) DEF _(): プリント(F ' フロート:{} ' ) 場合 __name__ == ' __main__ ' : FUNC(' ZZZ ' ) FUNC( 1 ) FUNC(1.2)
その他:ZZZ のInt: 1 フロート: 1.2
このアプローチは機能のみが最初の引数の種類に応じて、最終的な呼び出しを決定することであることに留意されたいです。
詳細はsingledispatchの公式文書を参照してください
https://docs.python.org/3.6/library/functools.html#functools.singledispatch