Protocols in Python. use structural subtyping | by Oliver S | Jul, 2023

use structural subtyping

Python 3.8 launched a neat new function: protocols. Protocols are an alternative choice to abstract base classes (ABC), and permit structural subtyping — checking whether or not two lessons are suitable based mostly on out there attributes and capabilities alone. On this put up we’ll go into the main points about this and present learn how to use protocols utilizing sensible examples.

Photograph by Chris Liverani on Unsplash

Allow us to start by discussing how Python is typed. It’s a dynamically typed language, that means varieties are inferred at runtime and the next code runs with out issues:

def add(x, y):
return x + y

print(add(2, 3))
print(add("str1", "str2"))

The primary name ends in an integer addition returning 5, the second in a string concatenation returning “str1str2”. That is completely different to e.g. C++, which is statically typed — and now we have to offer kind declarations:

int add(int x, int y) {
return x + y;

std::string add(std::string x, std::string y) {
return x + y;

int fundamental()
std::cout<<add(2, 3);
std::cout << add("str1", "str2");
return 0;

Static typing gives the benefit of getting the potential to catching errors at compile time — whereas in dynamically typed languages we solely encounter these throughout runtime. Then again, dynamic typing can permit faster prototyping and experimentation — one motive why Python has turn out to be so common.

Dynamic typing can also be known as duck typing, based mostly on the saying: “if it walks like a duck and it quacks like a duck, then it should be a duck”. Ergo: if objects provide the identical attributes / capabilities, they need to be handled equally, and e.g. may be handed to capabilities requiring the opposite kind.

Nonetheless, particularly in bigger, extra skilled software program merchandise, this unreliability gives extra down- than upsides — and the pattern thus goes in the direction of static kind checking, e.g. by way of providing type hints with mypy.


One fascinating problem — hinted above e.g. within the brief paragraph about duck typing — is subtyping. If now we have a operate with signature foo(x: X), what different lessons besides X does mypy permit to be handed to the operate? (Word we now solely…

Improve Distinction with Histogram Equalization

Utilizing Plotly Categorical Sunburst Charts to Discover Geological Knowledge | by Andy McDonald | Jul, 2023