Задать вопрос
xenon
@xenon
Too drunk to fsck

Как правильно узнавать типы данных (из внешних пакетов) для объявления своих функций?

По-хорошему принято указывать типы для всех аргументов функций.
Но вот, допустим, есть у нас скрипт, который работает с SQLAlchemy с банальным кодом вроде:

engine = create_engine(args.db)

Но если дальше я передаю engine в функцию - какой тип мне указать для него? Для всех базовых типов, для своих классов - все понятно. Но как узнать это для стороннего пакета? (вопрос не именно про SQLAlchemy, а для общего случая)

Если я печатаю type(engine) то я узнаю: sqlalchemy.engine.base.Engine
ChatGPT советует - sqlalchemy.engine.Engine
хелп в VSCode говорит - "Create a new _engine.Engine instance."
при этом часто ведь возвращаемый тип может быть разным (например, можно допустить что в альтернативном пакете для mysql и для postgresql сами типы могут быть разные, но от общего предка). То есть, я не могу использовать то, что мне type() выдал.

Как при работе с незнакомым пакетом правильно определить, какой тип использовать? Есть какой-то единый прямой каноничный способ?
  • Вопрос задан
  • 72 просмотра
Подписаться 1 Простой 5 комментариев
Пригласить эксперта
Ответы на вопрос 2
Lord_of_Rings
@Lord_of_Rings
Дунадан - северный странник. Злой, но очень добрый
Во-первых, зачем париться с типами
Во-вторых, я всегда указываю (когда указываю) тот тип, который возвращается (sqlalchemy.engine.Engine) или тот, от которого наследуется.
В-третьих, ни о каких каноничных стандартах, кроме PEP, я не слышал
Ответ написан
@Everything_is_bad
так разные же Engine. Даже если они одинаковые, есть разные символы:
- sqlalchemy.Engine
- sqlalchemy.engine.Engine
- sqlalchemy.engine.base.Engine

Чтобы узнать, разные или нет - надо полазить по исходникам. Неужели это правильный путь?
вот сразу заблуждение что они разные, отсюда вытекает полное непонимание.

Какой правильно из этих - да куча вариантов, открыть доки и почитать как принято (обычно более короткий путь), исследовать исходный код тоже хороший вариант, особенно когда там уже аннотировано, а если нет, то поставить stubs пакет, у большинства популярных он есть, pip install sqlalchemy-stubs, ну и при наличия аннотаций IDE тебе будут выводить верные подсказки (хотя и без них тоже уже давно умеют)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы