Ошибка синтаксиса на аннотации типа
есть такой код с синтаксической ошибкой:
from typing import List, Dict, Any, Optional, Union
class Message:
def __init__(self):
self.a: Dict[str, Any] = {}
self.b: List[Dict[str, Any]] = []
self.c: List[Dict[str, Any]] = []
^
SyntaxError: invalid syntax
Я так понимаю, дело в версии питона. Помогите переделать на валидную версию для python3.5
Ответы (2 шт):
Автор решения: V-Mor
→ Ссылка
Не совсем то, что нужно, но нужные типы атрибутам присваиваются:
from typing import List, Dict, Any, Optional, Union
class Message:
def __init__(self):
self.a = {'' : Any}
self.b = [{'' : Any}]
self.c = [{'' : Any}]
mes = Message()
print(type(mes.a)) # <class 'dict'>
print(type(mes.b)) # <class 'list'>
print(type(mes.c)) # <class 'list'>
Это всё, что удалось изобрести для Python версии до 3.6. Начиная с 3.6, аннотация типов, которую Вы используете, поддерживается.
Обратите внимание, что при таком подходе в списках и словаре уже есть по одному элементу после инициализации.
Автор решения: insolor
→ Ссылка
Для версий Python старше 3.6 можно использовать аннотации типа в комментариях:
from typing import List, Dict, Any, Optional, Union
class Message:
def __init__(self):
self.a = {} # type: Dict[str, Any]
self.b = [] # type: List[Dict[str, Any]]
self.c = [] # type: List[Dict[str, Any]]
message = Message()
message.a = 1
При проверке через mypy покажет ошибку:
example.py:12: error: Incompatible types in assignment (expression has type "int", variable has type "Dict[str, Any]")
Found 1 error in 1 file (checked 1 source file)