如何在python中重载一个函数? [复制]

Posted

技术标签:

【中文标题】如何在python中重载一个函数? [复制]【英文标题】:How to overload a function in python? [duplicate] 【发布时间】:2018-07-04 00:26:32 【问题描述】:

在 python 中,我似乎无法重载以下函数:

#!/usr/bin/env python

import subprocess
def my_function (a) :
    subprocess.call(['proc', a])
    return;

def my_function (a, b) :
    subprocess.call(['proc','-i',a,b])
    return;

def my_function (a, b, c, d) :
    subprocess.call(['proc','-i',a,b,'-u',c,d])
    return; 

例如当我打电话时:

mymodules.my_function("a", "b")

我明白了:

Traceback (most recent call last):
  File "sample.py", line 11, in <module>
    mymodules.my_function("a", "b") 
TypeError: my_function() takes exactly 4 arguments (2 given)

为什么它会尝试调用带有 4 个参数的函数?

【问题讨论】:

Python 不支持设计重载。 这不是函数在 python 中的工作方式。它们是对象,就像其他任何东西一样,所以一次只能调用一个 my_function 因为这是定义所有三个之后存在的唯一版本,因为它是最后定义的。不清楚你为什么认为你可以这样做。 【参考方案1】:

因为函数重载在 python 中不像在其他语言中那样起作用。

我会做什么:

def my_function (a, b=None, c=None, d=None) :
    if b is None:
        subprocess.call(['proc', a])
    elif c is None:
        subprocess.call(['proc','-i',a,b])
    else:
        subprocess.call(['proc','-i',a,b,'-u',c,d])
    return; 

它会自动检测你输入的变量,默认情况下用 None 填充你没有输入的变量。当然,要让它工作,你的变量绝不能取 None 的值

【讨论】:

以上是关于如何在python中重载一个函数? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Python 中创建多个构造函数? [复制]

如何手动实现在python中添加整数的函数重载?

在Singleton类的情况下我应该如何编写复制构造函数?如何重载=运算符?

如何重载 Python 的 __bool__ 方法? [复制]

如何在javascript中进行重载? [复制]

如何在 Rider 中启用视图热重载? [复制]