Python – доступ к подсказке ограниченного универсального типаPython

Программы на Python
Ответить
Anonymous
 Python – доступ к подсказке ограниченного универсального типа

Сообщение Anonymous »

mypy недоволен приведенным ниже кодом по
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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»