Ввод в 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!