Как указать, что одна переменная типа должна быть подклассом переменной другого типа в PythonPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как указать, что одна переменная типа должна быть подклассом переменной другого типа в Python

Сообщение Anonymous »

Я пытаюсь создать абстрактный клиентский класс API. Для конкретного подкласса он будет иметь дело с конечными точками API определенного базового класса. Каждая конкретная конечная точка будет подклассом этого базового класса.
Изначально я пытался определить свой абстрактный клиентский класс API следующим образом (упрощенно, чтобы просто изолировать проблему, с которой я столкнулся):

Код: Выделить всё

from abc import ABC
from typing import Generic, Type, TypeVar

from .endpoints import BaseGenericEndpoint

BaseClientEndpoint = TypeVar('BaseClientEndpoint', bound=BaseGenericEndpoint)
SpecificClientEndpoint = TypeVar('SpecificClientEndpoint',
bound=BaseClientEndpoint)

class APIClient(ABC, Generic[BaseClientEndpoint]):

def __init__(self, *args, **kwargs):
self._endpoint_values: dict[str, BaseClientEndpoint] = {}

def get_endpoint(
self, endpoint_name: str,
endpoint_type: Type[SpecificClientEndpoint]
) -> SpecificClientEndpoint:
if endpoint_name not in self._endpoint_values:
self._endpoint_values[endpoint_name] = endpoint_type()
return self._endpoint_values[endpoint_name]
Проблема в том, что строкаSpecificClientEndpoint предлагает pycharm сообщить мне, что ограничения не могут быть параметризованы переменными типа. Но без этого я не знаю, как ввести аннотацию того факта, что аргумент/возвращаемое значение для метода get_endpoint должно быть подклассом BaseClientEndpoint (но не обязательно должно быть равно
Я думаю, что смогу найти хитрые способы обойти это (возможно, используя BaseClientEndpoint повсюду, а затем заставив подклассы использовать cast для обеспечения желаемого результата). ), но кажется, то, что я хочу сделать, не так уж и странно, поэтому я чувствую, что должно быть какое-то более элегантное решение, которое я упускаю из виду.
Я искал документы Python и mypy и не дали ответа, и мои исследования в Google также оказались бесплодными. Я видел других людей, которые сталкивались с той же ошибкой, но они пытались добиться чего-то другого, поэтому предложенные им решения неприменимы к моему случаю.

Подробнее здесь: https://stackoverflow.com/questions/792 ... -in-python
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»