Überladen eines Konstruktors in Python
- Verwenden mehrerer Argumente zum Überladen von Konstruktoren in Python
-
Verwendung des
@classmethod
Dekorators zum Überladen eines Konstruktors in Python
![Überladen eines Konstruktors in Python](/img/Python/feature-image---overload-constructors-in-python.webp)
Mehrere Konstruktoren helfen dabei, unsere benutzerdefinierte Klasse entsprechend ihren Parametern anzupassen. Durch die Verwendung verschiedener Parameter können wir verschiedene Konstruktoren triggern.
Mehrere Konstruktoren werden in Python nicht direkt unterstützt. Wenn mehrere Konstruktoren in der Klasse bereitgestellt werden, überschreibt der neueste den vorherigen. Es gibt jedoch einige alternative Möglichkeiten, einen Konstruktor in Python zu überladen.
Wir werden diese Methoden in diesem Artikel besprechen.
Verwenden mehrerer Argumente zum Überladen von Konstruktoren in Python
Das Überladen von Funktionen bezieht sich auf verschiedene Funktionen mit demselben Namen mit unterschiedlichen Parametertypen. Wir können einen Konstruktor überladen, indem wir mehrere Bedingungen deklarieren, wobei jede Bedingung auf einem anderen Satz von Argumenten basiert.
Zum Beispiel,
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)
Ausgabe:
1
Hello from Delft
Im obigen Beispiel haben wir zwei Arten von Parametern im Konstruktor. Einer ist ein String und der andere eine ganze Zahl. Das Konstrukt wird überladen, um die Ausgabe basierend auf dem Typ der bereitgestellten Argumente zu liefern.
Wir können einen Konstruktor auch basierend auf der Anzahl der bereitgestellten Argumente überladen. Diese Methode ähnelt dem vorherigen Beispiel.
Siehe den Code unten.
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)
Ausgabe:
More than three
Less than three
Verwendung des @classmethod
Dekorators zum Überladen eines Konstruktors in Python
Der Dekorator @classmethod
ermöglicht den Zugriff auf die Funktion, ohne eine Klasse zu instanziieren. Auf solche Methoden kann von der Klasse selbst und über ihre Instanzen zugegriffen werden. Beim Überladen werden solche Funktionen als Factory-Methoden bezeichnet. Wir können sie verwenden, um das Konzept der Konstruktorüberladung in Python zu implementieren.
Siehe den Code unten.
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)
Ausgabe:
first
second
Diese Methode ist die pythonischste Methode zum Überladen eines Konstruktors. Im obigen Beispiel bezieht sich das Argument cls
der Factory-Methode auf die Klasse selbst.