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?