Python Academy · Les

Polymorfisme en duck typing

Schrijf polymorfe code die met elk compatibel object werkt.

Les 4 van 414 stappen

Polymorfisme en duck typing is een gratis Python Academy-les op CoddyKit. Dit is les 4 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Python Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Python Academy bevat in totaal 4 lessen.

Inleiding

Polymorfisme zorgt ervoor dat verschillende objecten op dezelfde interface kunnen reageren. Duck typing betekent: als iets zich gedraagt als een eend, is het een eend.

Wat is polymorfisme?

Polymorfisme betekent 'veel vormen'. Dezelfde methodenaam werkt verschillend voor verschillende objecten. Python maakt hier volop gebruik van.
class Cat:
    def speak(self): return 'Meow'
class Dog:
    def speak(self): return 'Woof'
for animal in [Cat(), Dog()]:
    print(animal.speak())

Duck typing

Python vereist geen klassenhiërarchie voor polymorfisme. Als een object de juiste methode heeft, werkt het. Interfaces zijn niet nodig.
class Duck:
    def quack(self): return 'Quack'
class Person:
    def quack(self): return 'I am quacking like a duck'
def make_it_quack(duck):
    print(duck.quack())
make_it_quack(Duck())
make_it_quack(Person())

Polymorfe functies

len() werkt op tekenreeksen, lijsten, woordenboeken en tupels — allemaal omdat ze __len__ implementeren. Dit is ingebouwd polymorfisme.
for obj in ['hello', [1,2,3], {'a':1}]:
    print(type(obj).__name__, len(obj))

Operatoroverloading

+ werkt op gehele getallen, kommagetallen, tekenreeksen en lijsten, omdat elk type __add__ op een andere manier implementeert.
print(1 + 2)        # int addition
print('a' + 'b')    # string concat
print([1] + [2])    # list concat

Duck typing op basis van protocollen

Het iteratieprotocol: elk object met __iter__ en __next__ werkt in for-lussen — een basisklasse is niet nodig.
class Squares:
    def __init__(self, n): self.n,self.i=n,0
    def __iter__(self): return self
    def __next__(self):
        if self.i>=self.n: raise StopIteration
        x=self.i**2; self.i+=1; return x
print(list(Squares(5)))

EAFP versus LBYL

EAFP (Easier to Ask Forgiveness than Permission) gebruikt try/except. LBYL (Look Before You Leap) gebruikt if/hasattr. Python geeft de voorkeur aan EAFP.
# LBYL:
if hasattr(obj, 'quack'):
    obj.quack()
# EAFP (Pythonic):
try:
    'hello'.quack()
except AttributeError:
    print('no quack')

isinstance() voor veilige dispatch

Als je type-specifiek gedrag nodig hebt, is isinstance() overzichtelijker dan het opvangen van AttributeError.
def process(data):
    if isinstance(data, str):
        return data.upper()
    elif isinstance(data, list):
        return [x*2 for x in data]
print(process('hi'))
print(process([1,2,3]))

Abstracte basisklassen als protocollen

from abc import ABC, abstractmethod definieert formele protocollen. Subklassen moeten abstracte methoden implementeren.
from abc import ABC, abstractmethod
class Drawable(ABC):
    @abstractmethod
    def draw(self): pass
class Circle(Drawable):
    def draw(self): print('O')
Circle().draw()

typing.Protocol (3.8+)

class MyProtocol(Protocol): definieert structurele subtypering zonder ABC. Dit werkt met mypy voor statische controles.
from typing import Protocol
class Quackable(Protocol):
    def quack(self) -> str: ...
def make_quack(x: Quackable) -> str:
    return x.quack()
print('protocol demo')

Polymorfisme in de praktijk

Ontwerp API's die elk object met de juiste interface accepteren. Zo wordt je code uitbreidbaar zonder wijzigingen.
class JSONSerializer:
    def serialize(self, obj): import json; return json.dumps(obj)
class XMLSerializer:
    def serialize(self, obj): return f'<data>{obj}</data>'
def export(data, serializer):
    return serializer.serialize(data)
print(export({'x': 1}, JSONSerializer()))

Snelle controle

Wat betekent duck typing in Python?

Samenvatting

Polymorfisme: dezelfde interface, verschillend gedrag. Duck typing: gedrag is belangrijk, niet het type. Protocollen definiëren interfaces op informele wijze. EAFP (try/except) is typisch voor Python.

Ga door

Uitstekende voortgang! Ga door om het volgende concept onder de knie te krijgen.
Gratis beginnen

Leer Python met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
76
Lessen
320

Veelgestelde vragen

Is de les “Polymorfisme en duck typing” gratis?

Ja — de volledige tekst van “Polymorfisme en duck typing” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus Python Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Python Academy bevat in totaal 4 lessen.

Wat leer ik in “Polymorfisme en duck typing”?

Schrijf polymorfe code die met elk compatibel object werkt. Je oefent met Python Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met Python Academy te beginnen?

Ervaring vooraf is niet nodig. Python Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 4 van 4.

Hoe lang duurt de les “Polymorfisme en duck typing”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over Python Academy?

Ja. Elke les over Python Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Enkelvoudige overerving
  2. Methoden overschrijven en super()
  3. Meervoudige overerving en MRO
  4. Polymorfisme en duck typing
← Terug naar Python Academy