pythonで関数のオーバーロードはありません
pythonが関数のオーバーロードを提供しない理由を検討するために、最初に関数のオーバーロードを提供する必要がある理由を調査する必要があります。
関数のオーバーロードは、主に2つの問題を解決するためのものです。
可変パラメータタイプ。
可変パラメータの数。
また、基本的な設計原理は、2つの関数の機能がパラメータの種類と数が異なることを除いてまったく同じである場合にのみ、関数のオーバーロードが使用されるというものです.2つの関数の関数が実際に異なる場合、2つの関数の関数は異なります。オーバーロードを使用する必要がありますが、別の名前の関数を使用する必要があります。
したがって、ケース1の場合、関数は同じ関数を持ちますが、パラメータータイプが異なりますが、pythonはそれをどのように処理しますか?
答えは、pythonは任意のタイプのパラメーターを受け入れることができるため、まったく処理する必要がないということです。関数の関数が同じである場合、異なるパラメータータイプはpythonの同じコードである可能性が高く、2つの異なる関数を作成する必要はありません。
したがって、ケース2の場合、関数は同じ関数を持ちますが、パラメーターの数が異なります。pythonはそれをどのように処理しますか?
答えはデフォルトのパラメータです。この問題は、不足しているパラメーターをデフォルトのパラメーターとして設定することで解決できます。機能は同じであると想定しているため、不足しているパラメーターが最終的に必要になります。ケース1と2の両方に解決策があることを考えると、pythonは当然関数のオーバーロードを必要としません。
ナレッジポイントの補足:
パラメータアドレスを持つ関数connectがあるとします。このパラメータは、文字列またはタプルの場合があります。例えば:
connect('123.45.32.18:8080')connect(('123.45.32.18',8080))
コードを記述するこれらの2つの方法と互換性を持たせたいので、次のようにコードを書くことができます。
def connect(address):ifisinstance(address, str):
ip, port = address.split(':')
elif isinstance(address, tuple):
ip, port = address
else:print('アドレス形式が正しくありません')
これまでのところ、Pythonで関数のオーバーロードはありますかに関するこの記事はここで紹介されています。関連するpython関数のオーバーロードの詳細については、ZaLou.Cnを検索してください。
Recommended Posts