Зачем нужны аннотации типов в классах данных Python?Python

Программы на Python
Anonymous
Зачем нужны аннотации типов в классах данных Python?

Сообщение Anonymous »

В отличие от стандартных классов в полях классов данных Python должны иметь аннотацию типа. Но я не понимаю, какова на самом деле цель этих аннотаций типов. Можно создать такой класс данных

Код: Выделить всё

from dataclasses import dataclass, fields

@dataclass
class Broken:
field1: str = "default_string1",
field2: "" = "default_string2",
field3 = "default_string3"
И этот класс будет принят интерпретатором Python (и ваша программа проверки IDE/статического кода также может не увидеть в нем ничего плохого). Однако если вы используете класс

Код: Выделить всё

b = Broken()

print("Wannabe type for field1:", fields(b)[0].type)
print("Real type for field1:", type(b.field1))

print("Wannabe type for field2:", fields(b)[1].type)
print("Real type for field2:", type(b.field2))

try:
print("Wannabe type for field3:", fields(b)[2].type)
except:
print("field3 is not part of fields(b)")
print("Real type for field3:", type(b.field3))
вы получите неожиданный результат

Код: Выделить всё

Wannabe type for field1: 
Real type for field1: 
Обратили ли вы внимание на запятую после значения по умолчанию поля1? Таким образом, аннотация типа не используется для проверки того, что значение по умолчанию имеет правильный тип, поэтому реальный тип — это кортеж вместо типа str, используемого в аннотации.

Код: Выделить всё

Wannabe type for field2:
Real type for field2: 
Вы даже можете использовать пустую строку в качестве аннотации типа, и Python не вызовет удивления.

Код: Выделить всё

field3 is not part of fields(b)
Real type for field3: 
Если вы полностью оставите аннотацию типа, то поле не будет отображаться при вызове функции полей(). Однако доступ к нему все равно возможен через объект.
Итак, какова цель аннотации типа для классов данных? Действительно ли они используются только для проверки того, должно ли поле быть указано в списке с помощью функции поля()? Или разработчики Python предвидели будущую функциональность типов в классах данных, которая еще не была реализована? Зачем мне добавлять аннотации типов к классам данных в Python?

Подробнее здесь: https://stackoverflow.com/questions/789 ... ataclasses

Вернуться в «Python»