Em python existe uma maneira de saber se um objeto “implementa uma interface” antes de passá-lo para uma função?

Eu sei que isso pode soar como uma pergunta estúpida, especialmente para alguém que conhece a natureza de python, mas eu estava apenas pensando,Existe uma maneira de saber se um objeto "implementa uma interface", por assim dizer?

Para dar um exemplo do que eu quero dizer:

digamos que eu tenha essa função:

def get_counts(sequence):
     counts = {}
     for x in sequence:
         if x in counts:
             counts[x] += 1
         else:
             counts[x] = 1
     return counts

Minha pergunta é: Existe uma maneira de se certificar de que o objeto passado para a função éiterable? Eu sei que em Java ou C # eu poderia fazer isso com o método aceitar qualquer objeto que implementa uma interface específica, digamos (por exemplo)iIterable como isso:void get_counts(iIterable sequence)

Meu palpite é que, em Python, eu teria que empregar verificações preventivas de introspecção (em umdecorator talvez?) e jogue um costumeexception se o objeto não tiver um__iter__ atributo). Mas há maispythonic maneira de fazer isso?

questionAnswers(4)

yourAnswerToTheQuestion