Скажем, у меня есть класс абстрактного питона в форме: < /p>
class AbcClass(ABC, Generic[T]): ...
< /code>
С некоторыми реализациями: < /p>
class IntClass(AbcClass[int]): ...
class StrClass(AbcClass[str]): ...
class FloatClass(AbcClass[float]): ...
Тогда я хочу иметь функцию foo , которая принимает экземпляр любого из подклассов и значение, которое соответствует типу общего этого подкласса. Например: < /p>
def foo(obj: IntClass, value: int) -> None: ...
def foo(obj: StrClass, value: str) -> None: ...
def foo(obj: FloatClass, value: float) -> None: ...
Я пытаюсь создать декоратор для foo и хочу правильно ввести подпись метода. Как правильный способ ввести функцию foo с вызовом? Прямо сейчас я делаю: < /p>
T = TypeVar("T", bound=AbcClass)
V = TypeVar("V")
FooFn = Callable[[T, V], None]
Тем не менее, V не связан с t в приведенном выше коде, поэтому даже для конкретного intclass Технически V может быть любым ценить. Как я могу это исправить? Использование следующего невозможно, так как ABCClass не является ковариантом, и я также хочу вводить любой подкласс (например,: Intclass ).
FooFn = Callable[[AbcClass[V], V]
Подробнее здесь: https://stackoverflow.com/questions/794 ... base-class
Python Geric Typevar, связанный с общим базовым классом ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение