Python 可以實作方法重載嗎?

Mary-Kate Olsen
發布: 2024-10-22 23:56:29
原創
458 人瀏覽過

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

來源:php
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!