Não consegui entender ainda o que seria uma interface no Python e para que servem. Além disto, o que são as classes ABC?
Não consegui entender ainda o que seria uma interface no Python e para que servem. Além disto, o que são as classes ABC?
As classes ABC (Abstract Base Classes) tem dois propósitos: agir como um contrato (interface) e bloquear a criação de instâncias/objetos dessa classe.
A parte do contrato (interface) é para você forçar com que tenha a implementação de certos métodos e propriedades. Assim você garante que vai ter tudo o que estava prevendo.
A parte de não instanciar, é por como classes abstratas funcionam na maioria das linguagens de programação. Classes abstratas são só usadas como classes base para serem estendidas por outras classes.
Aqui está um exemplo simples mostrando o contrato e o bloqueio:
from abc import ABC, abstractmethod
class Test(ABC):
def foo(self):
pass
@abstractmethod
def bar(self):
pass
class Foo(Test):
pass
class Bar(Test):
def bar(self):
pass
bar = Bar()
# foo = Foo() # descomente para ver o erro por causa do contrato
# test = Test() # descomente para ver o erro por causa do bloqueio
Pode ler mais sobre elas aqui: https://docs.python.org/3/library/abc.html