考虑一对在 Python 中表示相同事物的类,并且每个类都实现一个将一个类转换为另一个类的方法。作为一个例子,考虑从笛卡尔坐标转换为极坐标,反之亦然。
@dataclass
class CartesianCoordinates:
x: float
y: float
def toPolarCoordinates(self) -> PolarCoordinates:
radius = ...
theta = ...
result = PolarCoordinates(radius, theta)
return result
@dataclass
class PolarCoordinates:
radius: float
theta: float
def toCartesianCoordinates(self) -> CartesianCoordinates:
x = ...
y = ...
result = CartesianCoordinates(x,y)
return result
由于我在定义之前使用
PolarCoordinates
,因此我尝试通过在 CartesianCoordinates
定义之前插入以下行来转发(实际上是重新定义)其声明:
class PolarCoordinates:
# forwarding declaration
pass
这是有效的,因为代码运行正确,但由于类重新定义,像 mypy 这样的检查将失败,并出现类似
Name PolarCoordinates already defined
的错误。
我知道Python中真正的前向声明是不可能的,但是有什么等价的东西可以允许在完全定义之前引用一个类,并且允许像mypy这样的python检查通过吗?
Python 支持前向类型声明。您可以使用字符串:
def toPolarCoordinates(self) -> “PolarCoordinates”:
或从未来导入(无需 DeLorean):
from __future__ import annotations
…
def toPolarCoordinates(self) -> PolarCoordinates: