Duck typing to koncepcja w programowaniu, która jest szczególnie popularna w językach dynamicznych, takich jak Python. Zgodnie z tą koncepcją, typ obiektu jest mniej ważny od metod lub atrybutów, które ten obiekt posiada. Nazwa pochodzi od angielskiego powiedzenia: “Jeśli coś chodzi jak kaczka i kwacze jak kaczka, to prawdopodobnie jest kaczką”. W kontekście programowania oznacza to, że jeśli obiekt może wykonać wymaganą operację, nie ma znaczenia, jaki jest jego typ.
Przykład użycia duck typing w Pythonie
Rozważmy prosty przykład, który pokaże, jak duck typing działa w praktyce. Załóżmy, że mamy różne klasy, które nie są ze sobą w żaden sposób powiązane, ale każda z nich posiada metodę speak.
class Duck:
    # Metoda speak dla klasy Duck
    def speak(self):
        print("Kwak!")
class Dog:
    # Metoda speak dla klasy Dog
    def speak(self):
        print("Hau!")
class Cat:
    # Metoda speak dla klasy Cat
    def speak(self):
        print("Miau!")
Mając powyższe klasy, możemy teraz napisać funkcję, która będzie wywoływać metodę speak bez wiedzy o typie przekazywanego obiektu. Jest to możliwe dzięki zastosowaniu duck typing.
def make_it_speak(animal):
    # Wywołanie metody speak niezależnie od typu obiektu
    animal.speak()
Teraz możemy przetestować naszą funkcję z obiektami różnych klas:
duck = Duck()
dog = Dog()
cat = Cat()
make_it_speak(duck)
make_it_speak(dog)
make_it_speak(cat)
Jak widać, funkcja make_it_speak poprawnie wywołała metodę speak na każdym z obiektów, niezależnie od ich typu. Nie było konieczności weryfikowania typu obiektu ani stosowania dziedziczenia czy implementacji interfejsów.
Podsumowanie
Duck typing to potężne narzędzie w Pythonie, które pozwala na pisanie bardziej elastycznego i dynamicznego kodu. Dzięki tej koncepcji, możemy projektować funkcje i metody, które działają z różnorodnymi typami obiektów, opierając się na obecności określonych metod lub atrybutów, zamiast konkretnego typu obiektu. Jest to szczególnie przydatne w sytuacjach, gdy chcemy zapewnić obsługę obiektów z różnych bibliotek lub frameworków, które mogą nie mieć wspólnego interfejsu ani klasy bazowej. Duck typing ułatwia także pisanie kodu, który jest łatwiejszy do ponownego użycia i bardziej odporny na zmiany.

