首頁  >  文章  >  後端開發  >  Python 可以實作方法重載嗎?

Python 可以實作方法重載嗎?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-10-22 23:56:29463瀏覽

Can Python Implement Method Overloading and How?

Python 中的方法重載:詳細說明

問題:

嘗試使用以下程式碼實作方法重載:

<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 參數指定預設參數值,單一函數可以處理這兩種情況。這種方法根據提供的參數數量有效地重載了函數。

進一步探討:

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn