2011-12-04 62 views
5

鏈接我在我的課兩個構造函數:構造在python

def __init__(self): 
    self(8) 

def __init__(self, size): 
    self.buffer = [1] * size 

,我想第一個構造函數調用第二,默認大小。這是可以在python中實現嗎?

+3

你沒有兩個構造函數,第二個將覆蓋第一。 – u0b34a0f6ae

回答

9

你不能在Python中定義多個初始化(如在評論中指出,__init__is not really a constructor),但你可以定義默認值,比如:

def __init__(self, size=8): 
    self.buffer = [1] * size 

在上面的代碼,一個緩衝區的大小8默認情況下創建,但如果指定了大小參數,則將使用該參數。

例如,假設初始化程序位於名爲Example的類中。此調用將創建類的新實例大小8(默認)的緩衝區:

e = Example() 

鑑於此調用將創建一個新實例大小10的緩衝:

e = Example(10) 

或者,你也可以這樣調用構造函數:

e = Example(size=10) 
+1

'__init__'不是構造函數,而是一個初始化器。參見['__init__'作爲構造函數?](http://stackoverflow.com/questions/6578487/init-as-a-constructor)。 – Nathan

+0

感謝您指出這一點,@Nathan。我相應地編輯了我的答案。 –

5

不,你不能在Python中重載方法。以這種方式

def __init__(self, size=8): 
    self.buffer = [1] * size 
1

可能不會:在這種情況下,你可以只使用一個默認值的size參數來代替。 Python類使用內部字典來存儲它的方法和屬性,第二個同名的方法覆蓋第一個方法和屬性。 你可以一個默認值分配給你額外的參數要做到這一點,

def __init__(self, size = 8): 
    self.buffer = [1] * size