Skip to main content
idego
Python & Entwicklung

Vi behöver prata om protokoll i Python

Av Idego Group

Vi behöver prata om protokoll i Python

Python har mognat avsevärt och utvecklare behöver moderna verktyg. Språket erbjuder nu protokoll som ett hälsosamt alternativ till abstrakta basklasser (ABC) och arv. Den här funktionen adresserar strukturell typning genom duck typing — principen att om det går som en anka och kvackar som en anka, så måste det vara en anka.

Artikeln demonstrerar detta genom ett „Hemmets Zoo"-exempel. Traditionella abstrakta basklasser kräver explicita arvsrelationer. När du tar bort en implementerad metod från en barnklass med ABC misslyckas instantiering omedelbart. Protokoll fördröjer dock typkontroll till körtid när metoder faktiskt anropas.

Den avgörande skillnaden: ABC använder nominell typning (arvsbaserad), medan protokoll använder strukturell typning (gränssnittsbaserad). Denna skillnad förändrar fundamentalt hur koppling fungerar. Klasser som implementerar ett protokoll behöver inte ärva från det, vilket minskar beroenden i hela kodbasen.

En betydande fördel involverar gränssnittsegregation. Istället för att tvinga funktioner att acceptera hela objekt med många metoder, låter protokoll utvecklare definiera dedikerade gränssnitt precis för specifika funktioner. Detta stämmer överens med SOLID-principerna genom att säkerställa att kod bara beror på nödvändig funktionalitet.

Artikeln erkänner kompromisser. Protokoll offrar explicita klassehierarkier — dokumentation blir mindre uppenbar när relationer inte deklareras genom arv. Dessutom, när instansskapande är avgörande, förblir ABC det överlägsna valet eftersom de tillhandahåller kompileringstidsverifiering.

Slutsatsen betonar att protokoll utmärker sig vid instansanvändning genom duck typing, vilket minskar koppling och möjliggör mer flexibel, elegant kodorganisation.

Relaterade artiklar