2014-09-03 77 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__佔地面積要初始化類兩種方式。