Код: Выделить всё
from typing import Literal, overload
@overload
def do_something(a: str, b: str="", no_return: Literal[False]=False) -> str: ...
@overload
def do_something(a: str, b: str="", no_return: Literal[True]=True) -> None: ...
def do_something(a: str, b: str="", no_return: bool=False) -> str| None:
return None if no_return else "OK"
# The two use cases
a = do_something("") # a should be "OK"
b = do_something("", no_return=True) # b should be None
Перегрузка 1 для " do_something" перекрывает перегрузку 2 и возвращает несовместимый тип
Мне это кажется очень простым использованием набора текста, но я не смог найти способ правильно введите эту функцию. Я нашел еще несколько сообщений о подобных проблемах, но каждый раз ответ был примерно «именно так».
Как это сделать? Я пытаюсь нарушить какое-то основное правило?
Изменить: я добавил параметры в начало метода, так как предлагаемое решение работает только без них.
Подробнее здесь: https://stackoverflow.com/questions/793 ... -depending