Duck typing
«Se cammina come un'anatra e fa qua qua come un'anatra, allora è un'anatra»: nei linguaggi dinamici a un oggetto basta avere i metodi o gli attributi giusti, indipendentemente dal suo tipo.
Tipico di Python, Ruby e JavaScript: def play(audio): richiede soltanto che audio abbia un metodo play(), non che erediti da una qualche classe AudioBase. In Python, __iter__, __len__ e __call__ sono protocolli basati sul duck typing.
Il corrispettivo dei linguaggi statici è la tipizzazione strutturale (TypeScript: { play(): void }) oppure i trait/protocolli (Rust, Swift). Il compromesso è tra rapidità di sviluppo e sicurezza a tempo di compilazione. La PEP 544 (Python Protocols) porta la tipizzazione strutturale anche in Python.