Überladen eines Konstruktors in Python

Hemank Mehtani 30 Januar 2023
  1. Verwenden mehrerer Argumente zum Überladen von Konstruktoren in Python
  2. Verwendung des @classmethod Dekorators zum Überladen eines Konstruktors in Python
Überladen eines Konstruktors in Python

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.

Verwandter Artikel - Python Constructor