关于python:对于多个构造器来说这样可以吗?

is this fine for multiple constructors?

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

我一直在学习Python中OOP的一些基础知识,我发现它不允许在上面有多个构造函数。但是,我尝试了以下代码:

1
2
3
4
5
6
7
8
9
class Whatever:

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

    def Whatever(self,x,y):
        self.x=x
        self.y=y

当我执行它时,它就像多个构造器一样工作:

1
2
3
4
5
6
c=Whatever()
print c.x,c.y
0,0
d=Whatever(1,2)
print d.x,d.y
1,2

在python中构建多个构造函数可以吗?


第二个"构造函数"实际上从未被调用。调用__init__函数时,有参数和无参数调用Whatever;调用Whatever(1,2)只调用__init__x=1y=2

您添加的Whatever函数如果确实调用它,将不会按您想要的方式运行,因为它是一个实例方法;您需要已经创建了一个Whatever实例来调用它。您需要一个classmethod来代替:

1
2
3
4
5
6
7
8
9
10
11
class Whatever(object):

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

    @classmethod
    def Whatever(cls,x,y):
        return cls(x,y)

d = Whatever.Whatever(1, 2)

但这确实是不必要的,因为__init__包含了初始化类的两种方法。