Я пытаюсь расширить list
питонов с помощью некоторых пользовательских методов, для этого я создаю класс, унаследованный от UserList
.
Я не уверен, что это правильный путь, и я хотел бычтобы получить mypy
хорошо играть с UserList
.
Я консультировался с cpython UserList docs и искал внутри mypy
для UserList
, но ничего не смог найти.
Использование:
Это минимальный пример того, что я пытаюсь достичь
from collections import UserList
from typing import List, Optional, Union
class A:
...
class B:
...
class C:
...
TMessage = Union[A, B, C]
class MyList(UserList):
"""Minimal example"""
def __init__(self, data: Optional[List[TMessage]] = None) -> None:
self.data: List[TMessage] = []
if data:
self.data = data[:]
def get_last(self) -> TMessage:
return self.data[-1]
# other methods to be added ...
some_data = [A(), B(), C(), C(), B(), A()]
my_list_a = MyList(some_data)
my_list_b = MyList(some_data)
my_list_b = my_list_a[3:]
Mypy жалуется следующим образом
~/tmp ❯❯❯ mypy mypy_userlist.py
mypy_userlist.py:34: error: Argument 1 to "MyList" has incompatible type "List[object]"; expected "Optional[List[Union[A, B, C]]]"
mypy_userlist.py:35: error: Argument 1 to "MyList" has incompatible type "List[object]"; expected "Optional[List[Union[A, B, C]]]"
mypy_userlist.py:37: error: Incompatible types in assignment (expression has type "MutableSequence[Any]", variable has type "MyList")
Я мог бы добавить # type: ignore
к конфликтующим строкам, но я бы хотел этого избежать.
Как правильно продлитьсписок python с пользовательскими методами и радует mypy?