2014-09-03 33 views
0

我一直在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

即使您删除了'Whatever'方法,这也会起作用。 – soon 2014-09-03 02:26:44

+0

我想他明显的问题是:为什么?为什么你需要多个构造函数?人们要求这样做的原因之一是因为它们来自另一种语言,如C++,这种做法很常见。通常可以通过使用合理的默认参数来满足要求。 – cdarke 2014-09-03 03:51:29

回答

2

你的第二个“构造函数”实际上从来没有被调用过。当你调用Whatever时,有和没有参数都会调用__init__函数;打电话Whatever(1,2)只需拨打__init__x=1y=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__占地面积要初始化类两种方式。