Одним из минусов использования подсказки типов в Python является торговля красотой кода Python.
До подсказки типов мои сигнатуры методов были краткими:
def echo(items):
for i in items:
print(i)
Поскольку мои команда использует подсказки типов, я также добавил подсказки типов в свой код:
def echo(items: Set[str]) -> None:
Все еще довольно разборчиво. Через некоторое время другие части моего кода, работающие с набором наборов, потребовали, чтобы мой items
был хешируемым, а другие - нет. Поэтому я решил также поддерживать frozenset
, и теперь мой метод выглядит так:
def echo(items: Union[Set[str],Frozenset[str]]) -> None:
Он начал выглядеть как методы в Java, хотя в Java я мог работать с интерфейсами, игнорируя реализацию. подробности:
void echo(Set<String> items) {
Python не поддерживает концепцию интерфейса, т.е. я не могу утверждать, что Set
реализует Frozenset
. Первоначальная реализация будет работать как для Set
, так и для Frozenset
благодаря утиной печати: оба ведут себя как установлено. Однако у меня сложилось впечатление, что явное указание типа почему-то не очень хорошо сочетается с уткой
Как мне найти хороший баланс между подсказкой и уткой?