Как динамически вводить свойства на основе ввода метода (Python)

#python #pydantic

#питон #pydantic

Вопрос:

Есть ли способ определить тип атрибута модели на основе какого-либо параметра?

Я пытаюсь ввести тип возвращаемого метода, который возвращает список объектов, например:

 {  "object": "type_depends_on_input_of_method",  "certainty": 0.8 }  

Я пытаюсь сделать так, чтобы метод принимал модель и возвращал определенный тип возвращаемого значения, чтобы выводился тип «объекта», что-то вроде этого:

 CT = TypeVar("CT")  class SearchReturnType(TypedDict, CT):  object: CT  certainty: float   class SearchInterface:  T = TypeVar("T")  @abc.abstractmethod  def search(self,  text: str,  model: Type[T]) -gt; List[SearchReturnType(Type[T])]:  

Есть ли способ реализовать это?

Мой идеальный сценарий состоял бы в том, что если я сделаю следующее, vscode распознает тип и автозаполнение работает так, как должно:

 search_interface = SearchInterfac() search_interface_response = search_interface.search("somethin", Document) first_document = search_interface_response[0].object --gt; Automatically recognized as a Document  

Комментарии:

1. Я думаю, что вы просто наследуете от typing.Generic[CT] , а не CT от .

2. Это работает! Спасибо

Ответ №1:

Унаследовать от Generic[CT] , а не CT от .

 class SearchReturnType(TypedDict, Generic[CT]):  object: CT  certainty: float  

Вместо SearchReturnType того , чтобы быть своего рода CT , это своего рода универсальный класс, который использует CT .