在类型化的python中避免顺序依赖

时间:2019-03-14 12:34:27

标签: python-3.x types

我正在使用输入的python。大部分情况下运作良好,但我有 由于顺序依赖性,我对很多代码进行了重新排序。例如 考虑这个玩具代码:

from typing import ClassVar, List

class MyFirstClass:
    attr: MyClass

class MyClass:
    # You can optionally declare instance variables in the class body
    attr: int

class MySecondClass:
    attr: MyClass

由于未声明MyClass,因此无法正确编译 在MyFirstClass中:

Traceback (most recent call last):
  File "Temp.py", line 5, in <module>
    class MyFirstClass:
  File "Temp.py", line 6, in MyFirstClass
    attr: MyClass
NameError: name 'MyClass' is not defined

令人讨厌。有没有办法解决?难道我做错了什么? 我迄今为止提出的最好的方法是,首先定义MyClass两次 没有身体的时间。

1 个答案:

答案 0 :(得分:0)

解决方法是将来导入:

from __future__ import annotations

这会导致Python在运行时不评估注释,而只是将它们作为字符串附加到__annotations__

此更改在PEP 563 - Postponed evaluation of annotations中进行了描述。请注意,它需要Python 3.7 +。