collection.Iterable vs typing - PullRequest
       30

collection.Iterable vs typing

0 голосов
/ 16 октября 2018

Я обнаружил, что в Python collections.Iterable и typing.Iterable могут использоваться в аннотациях типов и проверке того, является ли объект итеративным, то есть работают и isinstance(obj, collections.Iterable), и isinstance(obj, typing.Iterable).У меня вопрос, в чем различия между ними?И какой из них предпочтительнее в каких ситуациях?

1 Ответ

0 голосов
/ 16 октября 2018

typing.Iterable является общим, так что вы можете сказать, что он является итеративным, в аннотациях вашего типа, например, Iterable[int] для итерируемого целого числа.

Итерируемый набор является абстрактным базовым классом.Они могут включать дополнительные методы mixin , чтобы упростить реализацию интерфейса при создании ваших собственных подклассов.

Теперь получается, что Iterable не включает ни одного из этих mixin, ноэто часть интерфейса других абстрактных базовых классов, которые это делают.

Теоретически, итеративная типизация работает для любого из них, но для этого используется какая-то странная магия метакласса, поэтому они не ведут себя точно так жево всех случаях.Вам действительно не нужны универсальные шаблоны во время выполнения, поэтому нет необходимости использовать их вне аннотаций типов и тому подобного.Итерируемые коллекции с меньшей вероятностью вызовут проблемы в качестве суперкласса.

Короче говоря, вы должны использовать итеративную типизацию в аннотациях типов, но коллекции итерируемые как суперкласс.

...