Я пытаюсь создать контейнеры для элементов общего класса, который связан с этим классом контейнеров. Следующий код должен объяснить идею, я надеюсь: < /p>
from typing import Generic, Self, TypeVar
_TClass = TypeVar("_TClass", bound="BaseClass", covariant=True)
_TComponent = TypeVar("_TComponent", bound="BaseComponent")
class BaseClass:
components: dict[type["BaseComponent"[Self]], "BaseComponent"[Self]]
def get(self, component_type: type[_TComponent]) -> _TComponent:
"""Get a component of the specified type."""
return self.components[component_type] # type: ignore[return-value]
class BaseComponent(Generic[_TClass]):
parent: _TClass
class CommonComponent(BaseComponent[BaseClass]):
pass
class AClass(BaseClass):
pass
class AComponent(BaseComponent[AClass]):
pass
class BClass(BaseClass):
pass
class BComponent(BaseComponent[BClass]):
pass
a_a1 = AClass().get(AComponent)
a_c = AClass().get(CommonComponent)
b_b = BClass().get(BComponent)
b_c = BClass().get(CommonComponent)
a_b = AClass().get(BComponent) # should throw a mypy error
b_a1 = BClass().get(AComponent) # should throw a mypy error
< /code>
Это, конечно, не работает, так как базовый компонент _tcomponent отсутствует его параметр типа. Я действительно надеюсь, что есть некоторые профессионалы на питоне, которые могут мне помочь, так как я просто не могу обернуть голову вокруг этого.
Подробнее здесь: https://stackoverflow.com/questions/796 ... iner-class
Класс контейнеров для общего связанного с этим классом контейнеров ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Создание общего связанного списка, размещение следующего указателя в начале структуры
Anonymous » » в форуме C++ - 0 Ответы
- 22 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Ошибка связи между классом SQLite и классом SQL Server в Android Java
Anonymous » » в форуме Android - 0 Ответы
- 31 Просмотры
-
Последнее сообщение Anonymous
-