Before typing was released for Python, the ABC class reigned as champion for describing shape and behaviors of classes. After type annotations, ABC and @abstractmethod were still used to describe the behaviors: they felt ‘interface-like’. Then, Protocol was released and introduced a new way for declaring class behaviors. Should you use ABC or Protocol? Before describing why or why not you should choose one over the other, let’s delve into what each of them are.