如何在python中重载函数?

How to overload a function in python?

本问题已经有最佳答案,请猛点这里访问。

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/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;

例如,当我打电话给:

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

我得到:

1
2
3
4
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中不能像在其他语言中那样工作。

我会怎么做:

1
2
3
4
5
6
7
8
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。