app.py:33: error: List comprehension has incompatible type List[TradeBar | QuoteBar]; expected List[T] [misc]
Хотя мы знаем, что this_type — это класс T.
- Почему mypy недоволен? Это неподдерживаемая функция или я делаю что-то глупое?
- Если это глупо, как лучше это сделать? Должен ли я просто использовать BarBase в качестве верхней границы типа, т.е.
class MyUsefulClass[T: BarBase]
from datetime import datetime
from dataclasses import dataclass, asdict
@dataclass
class BarBase:
sym: str
timestamp: datetime | None
@dataclass
class TradeBar(BarBase):
open: float
high: float
low: float
close: float
@dataclass
class QuoteBar(BarBase):
bid: float
ask: float
Bars = TradeBar | QuoteBar
class MyUsefulClass[T: Bars]:
def __init__(self, this_type: type[T]):
self.this_type = this_type
def silly_fn(self, x: T, y: T) -> list[T]:
return [self.this_type(**asdict(a)) for a in (x, y)]
util = MyUsefulClass[QuoteBar](QuoteBar)
util.silly_fn(
QuoteBar(sym="abc", timestamp=None, bid=1.1, ask=2.2),
QuoteBar(sym="def", timestamp=None, bid=99.9, ask=100.1),
)
Подробнее здесь: https://stackoverflow.com/questions/798 ... -type-hint
Мобильная версия