Ввод в Python

Недавно я начал писать код для программы, выполняемой на AWS Lambda. Из-за характера программы я выбрал Python в качестве языка. Поскольку я настоящий энтузиаст TypeScript и немного помешан на удобочитаемом коде, я заметил, как сильно мне не хватает типов при написании кода. Поэтому, как и многие из нас, я начал гуглить, как использовать типы в Python.

Создание типов путем создания классов

В моей первой попытке создать типы я создал классы и сохранил их в отдельном модуле для своего проекта. Как показано ниже:

class FancyToteBagClass:
    def __init__(self, id: int, title: str, color: str, size: str):
        self.id: int = id
        self.title: str = title
        self.color: str = color
        self.size: str = size

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

Использование модуля ввода

Я думаю, что Python согласен с этим и выпустил модуль ввода с Python 3.5. И да, я использовал Python 3.5+, поэтому я сразу же просмотрел документацию, чтобы узнать, что делает этот модуль и позволяет ли он мне создавать собственные типы.

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

from typing import NewType
UserId = NewType('UserId', int)
some_id = UserId(524313) # validates for 'int'

Это простое использование ввода проверит, действительно ли ваш недавно созданный пользовательский тип является int. С NewType вы наследуете существующие типы. Я хотел создать FancyToteBag и обнаружил, что могу использовать тип NamedTuple следующим образом:

class FancyToteBag(NamedTuple):
    id: int
    title: str
    color: str
    size: str

Это кажется мне намного чище. Таким образом, вы можете использовать достойную проверку типов и функции, связанные с типом NamedTuple. Вам не нужно указывать все аргументы в файле init.

Компромиссы

Однако я думаю, что в этом может быть обратная сторона. После создания обоих пользовательских типов я проверил размер созданных объектов. Версия старой школы занимает около 48 байт, а новая версия использует 72 байта… ой. Кажется, мы наткнулись на компромисс между простотой использования/читабельностью и производительностью.

Дайте мне знать, что вы думаете о наборе текста в Python!

Ссылка: https://docs.python.org/3/library/typing.html