在 Python 中重载构造函数
Hemank Mehtani
2023年1月30日
2021年12月2日
多个构造函数有助于根据其参数自定义我们的自定义类。在使用不同的参数时,我们可以触发不同的构造函数。
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
参数是指类本身。