phinnik
@phinnik
В фамилии ударение на первую о.

Как отобразить автоподсказки при типе typing.List[typing.Union] для любого элемента списка?

Мне необходимо сделать так, чтобы при вводе точки, пайчарм предлагал мне методы не только связанные с dict, но и с str.
Например чтобы в подсказке были и join(), и items()

class A(BaseModel):
    items: List[dict] = Field(None)


class B(BaseModel):
    items: List[str] = Field(None)


class C(BaseModel):
    response: Union[A, B] = Field(None)


c = C(**{'response': {'items': [1, 2, 3]}})


K2iFW.png
  • Вопрос задан
  • 43 просмотра
Пригласить эксперта
Ответы на вопрос 1
trapwalker
@trapwalker Куратор тега Python
Программист, энтузиаст
Вы хотите странного.
А именно, по какой то причине хотите сделать заведомо небезопасный код, и при этом хотите, чтобы IDE вам в этом помогал. Это я к чему: кейс, который вы здесь привели, - это антипаттерн; было бы странно ожидать такую специфическую обработку этой ситуации от IDE.

В чем, собственно, проблема.
Метод, который вы вызываете у объекта, не должен зависеть от того, какие данные у вас на входе, иначе ваш код становится небезопасным и при жругом наборе данных возможна ошибка из-за отсутствия вызванного метода.

Такие вещи нужно в коде разбирать явно.
К примеру можно явно проверить переменную на принадлежность типу и IDE это учтёт делая подсказку:
resp = c.response
if isinstance(resp, A):
    resp.items[0].
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы