如何进行函数重载?

时间:2017-02-12 14:43:15

标签: python constructor overloading

如何在Python中重载函数?我知道默认参数,但是如果你想要一个版本的函数采用一种类型而另一个版本采用不同的类型会怎样。在某些情况下,使用不同的名称编写两个不同的函数会更容易,例如 from_int from_str ,但在某些情况下这并不总是可行的,例如 _init _ 方法。

一个简单的例子:

class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __init__(self, point):
        self.x = point.x
        self.y = point.y

显然这不起作用,因为有两个相同功能的定义。

我已经查看了有关重载函数的其他问题,但是大多数问题都是指使用默认参数,我不认为在这种情况下会有效,特别是如果我想将默认参数用于其他目的。假设我想要第一个构造函数将 x y 设置为零,如果没有给出: _init_(x = 0,y = 0)

如果我想要第三个版本的 _init _ 从一个标量值初始化 x y ,这将变得更加成问题:< / p>

def __init__(self, n):
    self.x = n
    self.y = n

在C ++中,这些构造函数实现起来很简单,但我不知道在python中使用它的方法很简洁。

我想过这样做,但打电话似乎不太干净:

class Point:
    def __init__(self, x=0, y=0):
        self.x = x
        self.y = y

    @staticmethod
    def from_pair(x, y):
        return Point(x, y)

    @staticmethod
    def from_single(n):
        return Point(n, n)

    @staticmethod
    def from_point(point):
        return Point(point.x, point.y)

0 个答案:

没有答案