考虑一对在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
,所以我try 通过在CartesianCoordinates
定义之前插入以下行来转发(实际上重新定义)它的声明:
class PolarCoordinates:
# forwarding declaration
pass
这是可行的,从这个意义上讲,代码可以正确运行,但是像mypy这样的判断将会失败,因为类重新定义会出现类似Name PolarCoordinates already defined
的错误.
我知道用Python语言进行真正的向前声明是不可能的,但是有没有什么等价的东西允许在类完全定义之前引用它,并且允许S像mypy一样判断通过呢?