問題:
次のコードを使用してメソッドのオーバーロードを実装しようとしています。
<code class="python">class A: def stackoverflow(self): print('first method') def stackoverflow(self, i): print('second method', i) ob = A() ob.stackoverflow(2) # Output: second method 2 ob.stackoverflow() # Error: Takes exactly 2 arguments (1 given)</code>
解決策:
メソッドのオーバーライドとは異なり、メソッドのオーバーロードは Python ではネイティブにサポートされていません。したがって、別の方法で実装する必要があります。
<code class="python">class A: def stackoverflow(self, i='some_default_value'): print('only method') ob = A() ob.stackoverflow(2) # Output: second method 2 ob.stackoverflow() # Output: only method</code>
i パラメーターにデフォルトの引数値を指定することで、1 つの関数で両方のシナリオを処理できます。このアプローチでは、指定された引数の数に基づいて関数を効果的にオーバーロードします。
さらなる調査:
Python 3.4 では、functools.singledispatch デコレータを使用したシングル ディスパッチ汎用関数が導入されました。
<code class="python">from functools import singledispatch @singledispatch def fun(arg, verbose=False): if verbose: print("Let me just say, ", end=" ") print(arg) @fun.register(int) def _(arg, verbose=False): if verbose: print("Strength in numbers, eh?", end=" ") print(arg) @fun.register(list) def _(arg, verbose=False): if verbose: print("Enumerate this:") for i, elem in enumerate(arg): print(i, elem)</code>
これは、さまざまな引数の型に対するメソッドのオーバーロードを定義するより明示的な方法を提供します。
以上がPython はメソッドのオーバーロードを実装できますか?またその方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。