Объединение списков с различными типами

#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?