在 Python 中過載建構函式

Hemank Mehtani 2023年1月30日 2021年12月2日
  1. 在 Python 中使用多個引數過載建構函式
  2. 在 Python 中使用 @classmethod 裝飾器過載建構函式
在 Python 中過載建構函式

多個建構函式有助於根據其引數自定義我們的自定義類。在使用不同的引數時,我們可以觸發不同的建構函式。

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 引數是指類本身。

相關文章 - Python Constructor