Python 中的方法重載
在Python 中,方法重載是定義多個具有相同名稱但不同參數的方法的能力。但是,這可能會導致一些意外的行為。
範例1:
<code class="python">class A: def stackoverflow(self): print ('first method') def stackoverflow(self, i): print ('second method', i)</code>
如果您使用參數呼叫方法,則會呼叫第二個方法:
<code class="python">ob=A() ob.stackoverflow(2) # Output: second method 2</code>
但是如果你不帶參數呼叫它,Python會拋出錯誤:
<code class="python">ob=A() ob.stackoverflow() # Output: TypeError: stackoverflow() takes exactly 2 arguments (1 given)</code>
這是因為Python認為第一個方法沒有參數,沒有預設參數.
解方案:
要解決此問題,您可以使用預設參數值:
<code class="python">class A: def stackoverflow(self, i='some_default_value'): print('only method')</code>
現在,兩個呼叫都可以運作:
<code class="python">ob=A() ob.stackoverflow(2) # Output: only method ob.stackoverflow() # Output: only method</code>
單次調度的高級重載
Python 3.4 引入了單次調度通用函數,它允許您為不同的參數類型定義特定的行為:
<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>
這允許您使用不同的參數類型調用fun 並獲得適當的行為:
<code class="python">fun(42) # Output: Strength in numbers, eh? 42 fun([1, 2, 3]) # Output: Enumerate this: # 0 1 # 1 2 # 2 3</code>
以上是當方法重載在 Python 中不起作用時?的詳細內容。更多資訊請關注PHP中文網其他相關文章!