Советы по вводу в сложную иерархию классов - PullRequest
0 голосов
/ 20 апреля 2020

Скажем, у вас есть следующие абстрактные классы с определенными интерфейсами

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...