Скажем, у вас есть следующие абстрактные классы с определенными интерфейсами
import collections.abc
import typing
from abc import abstractmethod
class IterableAbstract(collections.abc.Iterable):
@abstractmethod
def some_method_1(self):
...
@abstractmethod
def some_method_2(self):
...
class SequenceAbstract(Abstract1, collections.abc.Sequence):
...
и классами BetterIterable
(который наследует IterableAbstract
) и BetterSequence
(который наследует SequenceAbstract
), которые реализуют все абстрактные функции.
Можно ли создать некоторую иерархию классов для средства проверки типа stati c, чтобы можно было различать guish IterableAbstract
и SequenceAbstract
экземпляры с подсказками типов?
Чтобы уточнить, я пытаюсь сделать возможным написать это:
T = typing.TypeVar('T')
def convert_to_sequence(iterable: IterableHint[T]) -> SequenceHint[T]:
...
Я попытался сделать следующее
class IterableHint(typing.Iterable):
pass
class SequenceHint(Abstract1Hint, typing.Sequence):
pass
IterableHint.register(BetterIterable)
SequenceHint.register(BetterSequence)
, но первый тест на жизнеспособность дал мне ошибка
>>> IterableHint[int]
TypeError: <class '__main__.IterableHint'> is not a generic class