Перегрузка после необязательного аргументаPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Перегрузка после необязательного аргумента

Сообщение Anonymous »

У меня есть класс Animal с методом foo, который имеет разные типы возвращаемых значений в зависимости от логического параметра inplace, который следует за необязательной строкой параметров. Я хотел бы перегрузить функцию, чтобы тип возвращаемого значения был известен, если известно значение inplace
Вот мой код:
< pre class="lang-py Prettyprint-override">

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

# main.py

from __future__ import annotations

from typing import Optional, overload, Literal

class Animal:
@overload
def foo(self, bar=..., inplace: Literal[False]=...) -> Animal:
...

@overload
def foo(self, bar=..., inplace: Literal[True]=...) -> None:
...

def foo(
self, bar=None, inplace: bool = False
) -> Optional[Animal]:
...

reveal_type(Animal().foo(bar='a'))
reveal_type(Animal().foo(inplace=True))
reveal_type(Animal().foo(inplace=False))

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

$ mypy main.py
main.py:8: error: Overloaded function signatures 1 and 2 overlap with incompatible return types
main.py:21: note: Revealed type is 'main.Animal'
main.py:22: note: Revealed type is 'None'
main.py:23: note: Revealed type is 'main.Animal'
Found 1 error in 1 file (checked 1 source file)
https://mypy-play.net/?mypy=latest&pyth ... 060fa61639
Как избежать сигнатур перегруженных функций 1 и 2 перекрываются с несовместимыми типами возврата ошибка в строке 8?

Подробнее здесь: https://stackoverflow.com/questions/664 ... l-argument
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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