这是 python 函数重载的例子吗?

Is this an example of python function overload?

我知道 python 不允许我们重载函数。但是,它有内置的重载方法吗?

考虑一下:

setattr(object_name,'variable', 'value')

setattr(class_name,'method','function')

第一个语句在 运行 时间动态地向对象添加变量,但第二个语句在 运行 时间将外部函数附加到 类。

同一个函数根据其参数做不同的事情。这个函数重载了吗?

无论 foo 的类型如何,函数 setattr(foo, 'bar', baz) 始终与 foo.bar = baz 相同。这里没有重载。

在 Python 3 中,functools.singledispatch 可以实现有限的重载,但是 setattr 没有实现。

在我看来,一个更有趣的例子是 type()type() 根据您的称呼方式做两种完全不同的事情:

  1. 如果使用单个参数调用,它 returns 该参数的类型。
  2. 如果使用三个参数(正确类型)调用,它会动态创建一个新的 class。

尽管如此,type() 并没有超载。为什么不?因为它被实现为 counts how many arguments it got 然后决定做什么的一个功能。在纯 Python 中,这是使用可变参数 *args 语法完成的,但是 type() 是在 C 中实现的,因此看起来很不一样。不过,它在做同样的事情。

Python,在某种意义上,不需要其他语言需要的函数重载能力。考虑以下 C:

中的示例
int add(int x, int y) {
    return x + y;
}

如果您希望扩展概念以包含非整数的内容,您需要创建另一个函数:

float add(float x, float y) {
    return x + y;
}

在Python中,您只需要:

def add(x, y):
    return x + y

它对两者都适用,并且不被视为函数重载。您还可以使用 isinstance 等方法处理变量类型的不同情况。主要问题 as pointed out by this question 是类型的数量。但是在您的情况下,您传递了相同数量的类型,即使如此,也有一些方法可以避免函数重载。

重载方法在 python 中很棘手。但是,可以使用传递字典、列表或原始变量。

我已经为我的用例尝试了一些东西,这可能有助于理解人们重载方法。

举个例子:

一个 class 重载方法,从不同 class.

调用方法

def add_bullet(sprite=None, start=None, headto=None, spead=None, acceleration=None):

从远程传递参数 class:

add_bullet(sprite = 'test', start=Yes,headto={'lat':10.6666,'long':10.6666},accelaration=10.6}

add_bullet(sprite = 'test', start=Yes,headto={'lat':10.6666,'long':10.6666},speed=['10','20,'30']}

因此,正在通过方法重载实现对列表、字典或原始变量的处理。

尝试使用您的代码