Отложенная проверка аннотаци

 


Неоднократно у меня возникала проблема в очерёдности положения классов в модуле при аннотации типа в методах.

Самый простой пример:

class A:
    def __init__(self):
       pass

    def allocate(self, line: OrderLine) -str:
        return None

class OrderLine:
    pass

a = A()
a.allocate(OrderLine())

при запуске получим

Traceback (most recent call last):
  File "C:\PKM74_dev_76\tests\ex_future.py", line 2, in <module>
    class A:
  File "C:\PKM74_dev_76\tests\ex_future.py", line 6, in A
    def allocate(self, line: OrderLine) -> str:
NameError: name 'OrderLine' is not defined
Процесс завершается с кодом выхода из 1

Вроде как надо перетащить OrderLine выше A. Есть способ проще, прописать в начале файла

from __future__ import annotations

получится так

from __future__ import annotations

class A:
    def __init__(self):
        pass

    def allocate(self, line: OrderLine) -> str:
        return None

class OrderLine:
    pass

a = A()
a.allocate(OrderLine())

print( a)

в выводе получим

<__main__.A object at 0x00ADE450>

Ошибок нет


Подробнее здесь https://devpractice.ru/python-lesson-18-annotations/

Комментарии

Популярные сообщения из этого блога

SQLAlchemy: Подключение к уже существующим базам данных

Настройка MSSQL Server 12 Express для доступа из локальной сети к справочникам k3mebel

Отключение запроса на изменение пароля при первом подключении Ошибка 15128 ... MUST_CHANGE is ON.