Мне интересно, подчиняться ли Tuple [float, ...], даже если я знаю длину кортежа.
У меня есть класс Point и Rect, а также свойство aspoints
в классе Rect, которое должно возвращать кортеж верхнего левого и нижнего правого углов в виде двух кортежей.
Итератор имеет тип Iterator[float]
, который, как я знаю, даст мне два числа с плавающей запятой. Я хочу, чтобы возвращаемое значение свойства было
Tuple[Tuple[float, float], Tuple[float, float]]
потому что я знаю, что итератор даст мне два числа с плавающей запятой для каждой точки.
Должен ли я отправить и просто сказать, что он вернет Tuple[Tuple[float, ...], Tuple[float, ...]]
, оставив комментарий в документации по их длине, или есть лучшее решение?
Вот код.
from dataclasses import dataclass
from typing import Iterator, Tuple
@dataclass
class Point:
x: float
y: float
def __iter__(self) -> Iterator[float]:
return iter((self.x, self.y))
@dataclass
class Rect:
x: float
y: float
width: float
height: float
@property
def tl(self) -> Point:
return Point(self.x, self.y)
@property
def br(self) -> Point:
return Point(self.x + self.width, self.y + self.height)
@property
def aspoints(self) -> Tuple[Tuple[float, float], Tuple[float, float]]:
return tuple(self.tl), tuple(self.br)
Проблема возникает в Rect.aspoints. От MyPy я получаю следующую ошибку:
error: Incompatible return value type (got "Tuple[Tuple[float, ...], Tuple[float, ...]]", expected "Tuple[Tuple[float, float], Tuple[float, float]]")