Отложенная проверка аннотаци
Неоднократно у меня возникала проблема в очерёдности положения классов в модуле при аннотации типа в методах.
Самый простой пример:
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/
Комментарии
Отправить комментарий