Whereas with Protocols it's gonna be ( good tutorial ): I think that is not a good example of how to write programs. What he did by having protocols I would have done by using mixins. The way that I see objects is that they have various capabilities that can be mixed in. multiple inheritance in python would have been a much better way to implement that example in my opinion. I would also say that the author of this tutorial needs to learn a thing or 2 about an inversion of control and dependency injection. The author basically sets up a straw man problem and then solves his straw man problem. He had no business creating instances of the object outside of the class itself. If he had simply called a constructor methods within the classes then the other class wouldn't have been attempting to make instances of those other classes. Answer from thedeepself on reddit.com
🌐
Justin A. Ellis
jellis18.github.io › post › 2022-01-11-abc-vs-protocol
Abstract Base Classes and Protocols: What Are They? When To Use Them?? Lets Find Out! - Justin A. Ellis
January 11, 2022 - In Python there are two similar, yet different, concepts for defining something akin to an interface, or a contract describing what methods and attributes a class will contain. These are Abstract Base Classes (ABCs) and Protocols.
🌐
Sinavski
sinavski.com › home › interfaces abc vs. protocols
Interfaces: abc vs. Protocols - Oleg Sinavski
August 1, 2021 - I would love Python to separate them on a language level, but it is unlikely to happen. Implicit protocols have an advantage here. They allow you to avoid messy inheritance altogether. Last but not least, you can count the number of lines of code you need to define an interface. With abc, you must have an abstractmethod decorator for every method.
🌐
Reddit
reddit.com › r/python › protocols vs abstract base classes in python
r/Python on Reddit: Protocols vs Abstract Base Classes in Python
December 1, 2024 -

Hi everyone. Last time I shared a post about Interface programming using abs in Python, and it got a lot of positive feedback—thank you!

Several people mentioned protocols, so I wrote a new article exploring that topic. In it, I compare protocols with abstract base classes and share my thoughts and experiences with both. You can check it out here: https://www.tk1s.com/python/protocols-vs-abstract-base-classes-in-python Hope you'll like it! Thanks!

🌐
Reddit
reddit.com › r/python › interfaces with protocols: why not ditch abc for good?
r/Python on Reddit: Interfaces with Protocols: why not ditch ABC for good?
January 22, 2023 -

Hello, if one finds interfaces useful in Python (>=3.8) and is convinced that static type-checking is a must, then why not ditch ABC and always use Protocols? I understand that the fundamental idea of a protocol is slightly different from an interface, but in practice, I had great success replacing abc's with Protocols without regrets.

With abc you would write (https://docs.python.org/3/library/abc.html) :

from abc import ABC, abstractmethod

class Animal(ABC):
   @abstractmethod
   def eat(self, food) -> float:
       pass

Whereas with Protocols it's gonna be (good tutorial):

from typing import Protocol

class Animal(Protocol):
   def eat(self, food) -> float:
       ...

Scores in my subjective scoring system :)

CapabilityABCProtocols
Runtime checking11 (with a decorator)
Static checking with mypy11
Explicit interface (class Dog(Animal):)11
Implicit interface with duck-typing (class Dog:)0.5 (kind of with register, but it doesn't work with mypy yet)1
Default method implementation (def f(self): return 5)-1 (implementations shouldn't be in the interfaces)-1 (same, and mypy doesn't catch this)
Callback interface01
Number of code lines-1 (requires ABC inheritance and abstracmethod for every method)0 (optionalProtocol inheritance)
Total score1.54

So I do not quite see why one should ever use ABC except for legacy reasons. Other (IMHO minor) points in favour of ABC I've seen were about interactions with code editors.

Did I miss anything?

I put more detailed arguments into a Medium. There are many tutorials on using Protocols, but not many on ABC vs Protocols comparisons. I found a battle of Protocols vs Zope, but we are not using Zope, so it's not so relevant.

🌐
Medium
medium.com › @pouyahallaj › introduction-1616b3a4a637
Python Protocols vs. ABCs: A Comprehensive Comparison of Interface Design | Medium
May 29, 2023 - However, ABCs in Python have some shortcomings. One of the main limitations is that they rely on subclassing, meaning a class can only inherit from one ABC. This restriction can be problematic in cases where multiple inheritance is needed. This is where Protocols come into play.
🌐
Python.org
discuss.python.org › ideas
Make abc.ABC a regular class by making __instancecheck__ and __subclasscheck__ class methods - Page 3 - Ideas - Discussions on Python.org
March 4, 2024 - __instancecheck__ and __subclasscheck__ on ABCMeta already does something like that, except in C, so it’s fast, all you’re really changing is moving the code from ABCMeta[1] to isinstance/issubclass, which is fine if you’re allowing all classes to register virtual subclasses, but it will add static overhead to all isinstance calls, there’s not really a way to avoid that or trade it against the dynamic dispatch overhead, since that is part of Python’s data model. or rather _abc if we’re talk...
🌐
GitConnected
levelup.gitconnected.com › python-interfaces-choose-protocols-over-abc-3982e112342e
Python interfaces: abandon ABC and switch to Protocols | by Oleg Sinavski | Level Up Coding
January 19, 2023 - A protocol is a formalization of Python’s “duck-typing” ideology. There are many great articles on structural typing in Python (for example, see this tutorial). Protocols and interfaces are different beasts in theory, but a protocol does the job. I had great success replacing abc with Protocols without any downsides.
Find elsewhere
🌐
Python
typing.python.org › en › latest › spec › protocol.html
Protocols — typing documentation
See Python data model for details.) The attributes (variables and methods) of a protocol that are mandatory for another class for it to be assignable to the protocol are called “protocol members”. Protocols are defined by including a special form typing.Protocol (an instance of abc.ABCMeta) in the base classes list, typically at the end of the list.
🌐
Python.org
discuss.python.org › ideas
Abstract Base Class for `queue.Queue` and `multiprocessing.Queue` - Ideas - Discussions on Python.org
March 20, 2025 - The interfaces of queue.Queue and multiprocessing.Queue have been designed consistently, but one still needs to use Union[queue.Queue, multiprocessing.Queue] to accept either one. Could we make it more elegant by adding something like the following to collections.abc? class Queue(metaclass=ABCMeta): @abstractmethod def __init__(self, maxsize: int): ... @abstractmethod def qsize(self): ... @abstractmethod def empty(self): ... @abstractmethod def full(self): ... ...
🌐
GitHub
github.com › python › typing › discussions › 1793
Variance of arguments for Generic ABC vs Generic Protocol · python/typing · Discussion #1793
July 9, 2024 - class ContraProtocolResultWriter[R: BaseResult](Protocol): @abc.abstractmethod def write(self, result: R) -> None: ...
Author   python
🌐
Python
docs.python.org › 3 › library › abc.html
abc — Abstract Base Classes
This module provides the infrastructure for defining abstract base classes (ABCs) in Python, as outlined in PEP 3119; see the PEP for why this was added to Python.
🌐
Medium
medium.com › @kandemirozenc › understanding-interfaces-abc-protocol-and-duck-typing-in-python-866ca32ab2a0
Understanding Interfaces, ABC, Protocol and Duck Typing in Python | by kandemirozenc | Medium
December 7, 2024 - In Python, there is no direct equivalent of Java’s “interface,” but similar functionality can be achieved using the abc module (Abstract Base Classes). Since Python embraces duck typing, enforcing a specific interface is not mandatory.
🌐
Python
docs.python.org › 3 › library › collections.abc.html
collections.abc — Abstract Base Classes for Containers
ABC for generator classes that implement the protocol defined in PEP 342 that extends iterators with the send(), throw() and close() methods.
🌐
TypeThePipe
typethepipe.com › post › python-protocols-when-to-use
Python protocols. When to use them in your projects to abstract and decoupling | TypeThePipe
December 11, 2023 - So, why are Protocols useful in Python? Protocols provide a solid API that users can depend on, without relaying on a specific type. That allow us to write more composable and maintainable code. Let’s create an example on how to create API where an Explainable protocol · from pydantic import BaseModel from typing import List, Optional, Tuple import numpy as np import matplotlib.pyplot as plt import matplotlib.figure from abc import ABC class BaseScorer(ABC, BaseModel): @abstractmethod def predict(self): ...
🌐
YouTube
youtube.com › arjancodes
Protocols vs ABCs in Python - When to Use Which One? - YouTube
💡 Learn how to design great software in 7 steps: https://arjan.codes/designguide.In this video, I’m revisiting Protocols and ABCs in Python, essential for c...
Published   March 29, 2024
Views   41K
🌐
DEV Community
dev.to › meseta › factories-abstract-base-classes-and-python-s-new-protocols-structural-subtyping-20bm
Python's new Protocols (Structural subtyping), Abstract Base Classes, and Factories - DEV Community
August 18, 2020 - Python has a built-in library for this called abc which stands for Abstract Base Class. The idea is to define an abstract base class for the file handler, against which new concrete implementations of different file handlers can be built.