在 Python 中重载构造函数

Hemank Mehtani 2023年1月30日
  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