Duck-Typing mit Python
Bild vom Autor | DALLE-3 & Canva

Was ist Duck Typing?

Ducktyping ist ein Konzept in der Programmierung, das oft mit dynamischen Sprachen wie Python in Verbindung gebracht wird und das mehr Wert auf das Verhalten des Objekts als auf seinen Typ oder seine Klasse legt. Wenn Sie Ducktyping verwenden, prüfen Sie, ob ein Objekt bestimmte Methoden oder Attribute hat, anstatt nach der genauen Klasse zu suchen. Der Title kommt von dem Sprichwort:

Wenn es wie eine Ente aussieht, wie eine Ente schwimmt und wie eine Ente quakt, dann ist es wahrscheinlich eine Ente.

Duck-Typing bietet mehrere Vorteile für die Programmierung in Python. Es ermöglicht flexibleren und wiederverwendbareren Code und unterstützt Polymorphismus, sodass verschiedene Objekttypen austauschbar verwendet werden können, solange sie die erforderliche Schnittstelle bieten. Dies führt zu einfacherem und prägnanterem Code. Duck-Typing hat jedoch auch seine Nachteile. Ein großer Nachteil ist das Potenzial für Laufzeitfehler. Darüber hinaus kann es Ihren Code schwer verständlich machen.

Dynamisches Verhalten in Python verstehen

In dynamisch typisierten Sprachen sind die Variablentypen nicht festgelegt. Stattdessen werden sie zur Laufzeit anhand der zugewiesenen Werte bestimmt. Im Gegensatz dazu prüfen statisch typisierte Sprachen die Variablentypen zur Kompilierzeit. Wenn Sie beispielsweise bei statischer Typisierung versuchen, einer Variablen einen Wert eines anderen Typs zuzuweisen, wird ein Fehler angezeigt. Dynamische Typisierung bietet mehr Flexibilität bei der Verwendung von Variablen und Objekten.

Betrachten wir die * Python-Operator; er verhält sich je nach Objekttyp, mit dem er verwendet wird, unterschiedlich. Bei Verwendung zwischen zwei Ganzzahlen führt er eine Multiplikation durch.

# Multiplying two integers
a = 5 * 3
print(a)  # Outputs: 15

Bei Verwendung mit einem String und einem Integer wiederholt es den String. Dies demonstriert das dynamische Typisierungssystem und die Anpassungsfähigkeit von Python.

# Repeating a string
a="A" * 3
print(a)  # Outputs: AAA

Wie funktioniert Duck Typing in Python?

Duck-Typing wird in dynamischen Sprachen bevorzugt, da es einen natürlicheren Programmierstil fördert. Entwickler können sich auf die Gestaltung von Schnittstellen konzentrieren, die auf den Möglichkeiten von Objekten basieren. Beim Duck-Typing wird den innerhalb der Klasse definierten Methoden mehr Bedeutung beigemessen als dem Objekt selbst. Lassen Sie uns dies anhand eines einfachen Beispiels verdeutlichen.

Beispiel Nr.: 01

Wir haben zwei Klassen: Ente und Particular person. Enten können ein Quaken machen, während Menschen sprechen können. Jede Klasse hat eine Methode namens sound, die ihre jeweiligen Geräusche ausgibt. Die Funktion make_it_sound nimmt ein beliebiges Objekt, das über eine Soundmethode verfügt, und ruft diese auf.

class Duck:
    def sound(self):
        print("Quack!")

class Particular person:
    def sound(self):
        print("I am quacking like a duck!")

def make_it_sound(obj):
    obj.sound()

Sehen wir uns nun an, wie wir Duck Typing für dieses Beispiel nutzen können.

# Utilizing the Duck class
d = Duck()
make_it_sound(d)  # Output: Quack!

# Utilizing the Particular person class
p = Particular person()
make_it_sound(p)  # Output: I am quacking like a duck!

In diesem Beispiel Duck Und Particular person Klassen haben eine sound Methode. Es spielt keine Rolle, ob das Objekt eine Ente oder eine Particular person ist; solange es eine sound Methode, die make_it_sound -Funktion wird ordnungsgemäß funktionieren.

Allerdings kann Duck Typing zu Laufzeitfehlern führen. So kann beispielsweise das Ändern des Methodennamens sound in der Klasse Particular person zu sprechen wird eine erhöhen AttributeError zur Laufzeit. Dies liegt daran, dass die Funktion make_it_sound erwartet, dass alle Objekte eine Klangfunktion haben.

class Duck:
    def sound(self):
        print("Quack!")

class Particular person:
    def communicate(self):
        print("I am quacking like a duck!")

def make_it_sound(obj):
    obj.sound()

# Utilizing the Duck class
d = Duck()
make_it_sound(d)

# Utilizing the Particular person class
p = Particular person()
make_it_sound(p)

Ausgabe:

AttributeError: 'Particular person' object has no attribute 'sound'

Beispiel Nr.: 02

Sehen wir uns ein weiteres Programm an, das sich mit der Berechnung von Flächen verschiedener Formen befasst, ohne sich um deren spezifischen Typ zu kümmern. Jede Kind (Rechteck, Kreis, Dreieck) hat ihre eigene Klasse mit einer Methode namens „space“ zur Berechnung ihrer Fläche.

class Rectangle:
    def __init__(self, width, peak):
        self.width = width
        self.peak = peak
        self.title = "Rectangle"

    def space(self):
        return self.width * self.peak

class Circle:
    def __init__(self, radius):
        self.radius = radius
        self.title = "Circle"

    def space(self):
        return 3.14 * self.radius * self.radius

    def circumference(self):
        return 2 * 3.14 * self.radius

class Triangle:
    def __init__(self, base, peak):
        self.base = base
        self.peak = peak
        self.title = "Triangle"

    def space(self):
        return 0.5 * self.base * self.peak

def print_areas(shapes):
    for form in shapes:
        print(f"Space of {form.title}: {form.space()}")
        if hasattr(form, 'circumference'):
            print(f"Circumference of the {form.title}: {form.circumference()}")

# Utilization
shapes = (
    Rectangle(4, 5),
    Circle(3),
    Triangle(6, 8)
)

print("Areas of various shapes:")
print_areas(shapes)

Ausgabe:

Areas of various shapes:
Space of Rectangle: 20
Space of Circle: 28.259999999999998
Circumference of the Circle: 18.84
Space of Triangle: 24.0

Im obigen Beispiel haben wir eine print_areas Funktion, die eine Liste von Formen annimmt und ihre Namen zusammen mit ihren berechneten Flächen ausgibt. Beachten Sie, dass wir den Typ jeder Kind nicht explizit prüfen müssen, bevor wir ihre Fläche berechnen. Da die Methode circumference ist nur vorhanden für die Circle Klasse, wird es nur einmal implementiert. Dieses Beispiel zeigt, wie Duck Typing zum Schreiben flexiblen Codes verwendet werden kann.

Abschließende Gedanken

Ducktyping ist eine leistungsstarke Funktion von Python, die Ihren Code dynamischer und vielseitiger macht und Ihnen ermöglicht, allgemeinere und anpassbarere Programme zu schreiben. Obwohl es viele Vorteile wie Flexibilität und Einfachheit bietet, erfordert es auch eine sorgfältige Dokumentation und Checks, um potenzielle Fehler zu vermeiden.

Kanwal Mehreen Kanwal ist Ingenieurin für maschinelles Lernen und technische Autorin mit einer tiefen Leidenschaft für Datenwissenschaft und die Schnittstelle zwischen KI und Medizin. Sie ist Mitautorin des E-Books „Maximizing Productiveness with ChatGPT“. Als Google Technology Scholar 2022 für APAC setzt sie sich für Vielfalt und akademische Exzellenz ein. Sie ist außerdem als Teradata Variety in Tech Scholar, Mitacs Globalink Analysis Scholar und Harvard WeCode Scholar anerkannt. Kanwal ist eine leidenschaftliche Verfechterin des Wandels und hat FEMCodes gegründet, um Frauen in MINT-Fächern zu stärken.

Von admin

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert