У меня есть следующее property
, определенное для class
:
import numpy as np
import typing as tp
@property
def my_property(self) -> tp.List[tp.List[int]]:
if not self.can_implement_my_property:
return list()
# calculations to produce the vector v...
indices = list()
for u in np.unique(v):
indices.append(np.ravel(np.argwhere(v == u)).tolist())
return sorted(indices, key=lambda x: (-len(x), x[0]))
PyCharm
жалуется на последнюю строку фрагмента выше, сигнально:
Ожидаемый тип 'List [List [int]], вместо него есть List [Iterable]' ...
Это довольно удивительно, поскольку:
indices
объявляется как list
ravel
гарантирует, что совпадающие значения argwhere
преобразуются в одномерный Numpy
вектор tolist
преобразует одномерный Numpy
вектор в список - полученный список добавляется в список
indices
Это может быть ложным положительным результатом из-за неправильной обработки подсказок типа на стороне IDE,потому что List[int]
на самом деле Iterable
... и, следовательно, List[List[int]] = List[Iterable]
.Но я не могу быть на 100% уверен в этом.
Есть какие-нибудь подсказки по этому вопросу?Как я могу обеспечить возвращаемое значение к ожидаемому типу?