簡體   English   中英

用可選參數處理函數重載的正確方法是什么?

[英]What's the correct way to handle function overloading with optional parameters?

這是我要實現的目標:

# first way to call. key value pair, where value could be anything.
def multiple_ways_to_call(key_param, value_param, optional = "optional"):
    pass

# second way to call. object_param is an instance of a specific class. type(object_param) == "myclass"
def multiple_ways_to_call(object_param, optional = "optional"):
    pass

我知道實際上不支持函數重載。 我以前只是通過檢查最后一個參數是否為null來完成此操作,但是由於我有可選參數,因此我不確定如何執行此操作。

如何處理這種情況? 我只是呼叫者看不見的區別。

在Python 3.4中添加了functools模塊中的@singledispatch裝飾器-請參閱Python Single Dispatch

如果您使用的是Python的早期版本, 則將其反向移植,並在PYPI上可用

@singledispatch僅根據賦予該函數的第一個參數的類型進行區分,因此它不像某些其他語言那么靈活。

來自文檔的示例:

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM