Подкласс Python абстрактного базового класса показывает ошибку типа ⇐ Python
-
Anonymous
Подкласс Python абстрактного базового класса показывает ошибку типа
pylance выдает ошибку типа, пока определены типы переменных. Ниже небольшой пример, который показывает структуру кода, а также выдает ошибку:
из аннотаций импорта __future__ из abc импорт ABC, абстрактный метод из классов данных импортировать класс данных от ввода генератора импорта, любой @dataclass Базовый класс (ABC): данные: список[стр | интервал] def __iter__(self) -> Генератор[str | int, Любой, Нет]: для xin self.data: доходность х def __getitem__(self, key) -> str | интервал: вернуть self.data[ключ] def __len__(self) -> int: вернуть len(self.data) @abstractmethod def some_general_function(self) -> Нет: проходить класс Test1 (базовый): данные: список[стр] def some_general_function(self) -> Нет: print("Общая функция из списка со строками") если __name__ == '__main__': тест = Тест1(['a', 'b', 'abc']) для элемента в тесте: печать(ele.capitalize) Ошибка в последней строке, ошибка говорит о том, что функция .capitalize недоступна для типа int.
В реализации класса (Test1) определено, что данные списка состоят из элементов типа str.
Кроме того, когда это проверяется в методе __post_init__ в классе Test1, ошибка все еще существует.
класс Test1(Базовый): данные: список[стр] защита __post_init__(сам): если нет (map(lambda x: isinstance(x, str), self.data)): поднять TypeError("данные должны быть Единственное решение — переписать __iter__ базового класса, поскольку в подсказке типа указано, что генератором может быть str и int.
Можно ли переписать только тип возвращаемого значения (или тип доходности) функции, не переписывая саму функцию?
pylance выдает ошибку типа, пока определены типы переменных. Ниже небольшой пример, который показывает структуру кода, а также выдает ошибку:
из аннотаций импорта __future__ из abc импорт ABC, абстрактный метод из классов данных импортировать класс данных от ввода генератора импорта, любой @dataclass Базовый класс (ABC): данные: список[стр | интервал] def __iter__(self) -> Генератор[str | int, Любой, Нет]: для xin self.data: доходность х def __getitem__(self, key) -> str | интервал: вернуть self.data[ключ] def __len__(self) -> int: вернуть len(self.data) @abstractmethod def some_general_function(self) -> Нет: проходить класс Test1 (базовый): данные: список[стр] def some_general_function(self) -> Нет: print("Общая функция из списка со строками") если __name__ == '__main__': тест = Тест1(['a', 'b', 'abc']) для элемента в тесте: печать(ele.capitalize) Ошибка в последней строке, ошибка говорит о том, что функция .capitalize недоступна для типа int.
В реализации класса (Test1) определено, что данные списка состоят из элементов типа str.
Кроме того, когда это проверяется в методе __post_init__ в классе Test1, ошибка все еще существует.
класс Test1(Базовый): данные: список[стр] защита __post_init__(сам): если нет (map(lambda x: isinstance(x, str), self.data)): поднять TypeError("данные должны быть Единственное решение — переписать __iter__ базового класса, поскольку в подсказке типа указано, что генератором может быть str и int.
Можно ли переписать только тип возвращаемого значения (или тип доходности) функции, не переписывая саму функцию?