Я знаю, что это может показаться глупым вопросом, особенно тем, кто знает природу питона, но мне просто интересно, есть ли способ узнать, реализует ли объект "интерфейс", чтобы сказать?
Чтобы привести пример того, что я хочу сказать:
скажем, у меня есть эта функция:
def get_counts(sequence):
counts = {}
for x in sequence:
if x in counts:
counts[x] += 1
else:
counts[x] = 1
return counts
Мой вопрос: есть ли способ убедиться, что объект передан функции iterable
? Я знаю, что в Java или С# я мог бы сделать это, приняв метод любым объект, реализующий конкретный интерфейс, скажем (например) iIterable
следующим образом: void get_counts(iIterable sequence)
Мое предположение заключается в том, что в Python мне пришлось бы использовать предварительные проверки самоанализа (в decorator
возможно?) и бросать пользовательский exception
, если у объекта нет __iter__
). Но существует ли более pythonic способ сделать это?