鏈接我在我的課兩個構造函數:構造在python
def __init__(self):
self(8)
def __init__(self, size):
self.buffer = [1] * size
,我想第一個構造函數調用第二,默認大小。這是可以在python中實現嗎?
鏈接我在我的課兩個構造函數:構造在python
def __init__(self):
self(8)
def __init__(self, size):
self.buffer = [1] * size
,我想第一個構造函數調用第二,默認大小。這是可以在python中實現嗎?
你不能在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)
'__init__'不是構造函數,而是一個初始化器。參見['__init__'作爲構造函數?](http://stackoverflow.com/questions/6578487/init-as-a-constructor)。 – Nathan
感謝您指出這一點,@Nathan。我相應地編輯了我的答案。 –
不,你不能在Python中重載方法。以這種方式
def __init__(self, size=8):
self.buffer = [1] * size
可能不會:在這種情況下,你可以只使用一個默認值的size
參數來代替。 Python類使用內部字典來存儲它的方法和屬性,第二個同名的方法覆蓋第一個方法和屬性。 你可以一個默認值分配給你額外的參數要做到這一點,
def __init__(self, size = 8):
self.buffer = [1] * size
你沒有兩個構造函數,第二個將覆蓋第一。 – u0b34a0f6ae