#python #python-3.x #list #mypy #python-typing
Вопрос:
У меня есть родительский класс A
. В нем мало детей: класс A1
и A2
т. Д. Я хочу создать список, который может содержать любого из детей или список с любым из детей, и интерпретировать его как класс B
. Код:
#!/usr/bin/python3
from typing import Union, List, NewType, Type, Sequence
from dataclasses import dataclass
class A:
pass
class A1(A):
pass
class A2(A):
pass
B = NewType("B", Sequence[Union[Sequence[Type[A]], Type[A]]])
b1 = B([A1] [A2]*2 [[A1, A2]])
b2 = B([A1, A2, [A1, A2]])
Если я создам список вручную, он будет работать нормально. Но если я создам его путем объединения разных списков, MyPy linter сообщит об ошибках:
main.py:17: error: List item 0 has incompatible type "Type[A2]"; expected "Type[A1]"
main.py:17: error: List item 0 has incompatible type "List[Type[A]]"; expected "Type[A1]"
Есть ли способ избежать ошибки, не подавляя линтер MyPy?