En Python, ¿hay una manera de saber si un objeto "implementa una interfaz" antes de pasarlo a una función?

Sé que esto puede sonar como una pregunta estúpida, especialmente para alguien que conoce la naturaleza de Python, pero me estaba preguntando,¿hay una manera de saber si un objeto "implementa una interfaz" para decir?

Para dar un ejemplo de lo que quiero decir:

digamos que tengo esta función:

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

Mi pregunta es: ¿hay una manera de asegurarse de que el objeto pasado a la función esiterable? Sé que en Java o C # puedo hacer esto haciendo que el método acepte cualquier objeto que implemente una interfaz específica, digamos (por ejemplo)iIterable Me gusta esto:void get_counts(iIterable sequence)

Mi conjetura es que en Python tendría que emplear controles de introspección preventivos (en undecorator tal vez?) y tirar una costumbreexception si el objeto no tiene una__iter__ atributo). Pero ¿hay máspitónico manera de hacer esto?

Respuestas a la pregunta(4)

Su respuesta a la pregunta