对于多个构造函数来说这是好的吗?

时间:2014-09-03 02:24:13

标签: python

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

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   

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

c=Whatever()
print c.x,c.y
0,0
d=Whatever(1,2)
print d.x,d.y
1,2

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

1 个答案:

答案 0 :(得分:2)

你的第二个“构造函数”实际上从未被调用过。当您使用和不使用参数调用__init__时,将调用Whatever函数;致电Whatever(1,2)只需使用__init__x=1来调用y=2

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

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__涵盖了您想要初始化类的两种方式。