Могу ли я использовать типы Union и Optional из модуля ввода при создании класса данных? - PullRequest
1 голос
/ 02 апреля 2019

Я хочу использовать типы Union и Optional при создании класса данных. Могу ли я безопасно использовать эти типы?

например:.

@dataclass
class Car:
    year: int
    owner: Optional[str]
    engine: Union[Engine1, Engine2]

1 Ответ

3 голосов
/ 05 апреля 2019

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

Аннотации толькоиспользуемые сторонними библиотеками или инструментами, например, вашей IDE, когда он дает вам подсказки, или mypy, когда он выполняет статический анализ типа вашего кода.

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


Хотя декларативного заявления о том, чтоВы должны использовать, здесь есть поток , обсуждающий типы классов данных по умолчанию, включая ericvsmith (автор модуля dataclasses) и gvanrossum (автор python), и они соглашаются, что typing.Anyдолжно быть предпочтительнее, чем object.

Я предполагаю, что документация класса данных использует базовые типы Python, чтобы не создавать слишком много бременизнания о читателе.Вы можете использовать классы данных просто отлично, ничего не зная о модуле typing в конце концов, и как только вы освоитесь с работой классов данных, вы, вероятно, столкнетесь и оцените дополнительную мощь использования аннотаций typing в любом случае.

...