在 Python 中過載建構函式
Hemank Mehtani
2023年1月30日
多個建構函式有助於根據其引數自定義我們的自定義類。在使用不同的引數時,我們可以觸發不同的建構函式。
Python 不直接支援多個建構函式。當類中提供了多個建構函式時,最新的建構函式會覆蓋前一個建構函式。但是有一些替代方法可以在 Python 中過載建構函式。
我們將在本文中討論這些方法。
在 Python 中使用多個引數過載建構函式
函式過載是指具有相同名稱的不同函式具有不同型別的引數。我們可以通過宣告多個條件來過載建構函式,每個條件都是基於一組不同的引數。
例如,
class delftstack:
def __init__(self, *args):
if isinstance(args[0], int):
self.ans = args[0]
elif isinstance(args[0], str):
self.ans = "Hello from " + args[0]
s1 = delftstack(1)
print(s1.ans)
s2 = delftstack("Delft")
print(s2.ans)
輸出:
1
Hello from Delft
在上面的例子中,我們在建構函式中有兩種型別的引數。一個是字串,另一個是整數。該構造被過載以根據提供的引數型別提供輸出。
我們還可以根據提供的引數數量過載建構函式。此方法類似於前面的示例。
請參閱下面的程式碼。
class delftstack:
def __init__(self, *args):
if len(args) > 3:
self.ans = "More than three"
elif len(args) <= 3:
self.ans = "Less than three"
s1 = delftstack(1, 2, 3, 4)
print(s1.ans)
s2 = delftstack(1, 2)
print(s2.ans)
輸出:
More than three
Less than three
在 Python 中使用 @classmethod
裝飾器過載建構函式
@classmethod
裝飾器允許在不例項化類的情況下訪問該函式。此類方法可以由類本身及其例項訪問。當用於過載時,此類函式稱為工廠方法。我們可以使用它們來實現 Python 中建構函式過載的概念。
請參閱下面的程式碼。
class delftstack(object):
def __init__(self, a):
self.ans = "a"
@classmethod
def first(cls):
return "first"
@classmethod
def second(cls):
return "second"
s1 = delftstack.first()
print(s1)
s2 = delftstack.second()
print(s2)
輸出:
first
second
此方法是過載建構函式的最 Pythonic 的方法。在上面的例子中,工廠方法的 cls
引數是指類本身。