Как ввести dict_keys/items/values ​​в Python? [дубликат] ⇐ Python

Программы на Python
Anonymous
Как ввести dict_keys/items/values ​​в Python? [дубликат]

Сообщение Anonymous »

У меня есть хранилище протоколов (как описано здесь), которое выглядит так:

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

from typing import Protocol, TypeVar, Any
type _KeyT[T] = type[T]

T = TypeVar('T', bound='SomeClass')

class Store(Protocol):
def __getitem__(self, __key: _KeyT[T]) -> T: ...
def __delitem__(self, __key: _KeyT[T]) -> None: ...
def __setitem__(self, __key: _KeyT[T], __value: T) -> None: ...
def get(self, key: _KeyT[T], default: None = None) -> Any | None: ...
который я использую следующим образом:

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

from typing import cast

a: Store = cast(Store, {})
Идея состоит в том, что у меня есть словарь с типами (все дочерние элементы SomeClass) в качестве ключа и экземпляры этих типов в качестве значений. И если я сделаю Store = dict[type[SomeClass], SomeClass], я получу менее конкретные подсказки типов, чем если бы я сделал это (поскольку все подсказки относятся к SomeClass, а не к дочернему классу).
Есть ли способ добавить подсказки типов также для Store.values/

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

.keys/.items
?
Я пробовал использовать это:

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

from _collections_abc import dict_items, dict_keys, dict_values
но я не могу установить здесь типы ключа/значения, поэтому он просто преобразуется в тип ключа Любой и тип значения Любой...
Для чего-то вроде defvalues(self) -> list[T] я не уверен, что list является полной заменой dict_values.>

Подробнее здесь: https://stackoverflow.com/questions/798 ... -in-python

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