Python 重载以下可选参数
我有一个类Python 重载以下可选参数,python,mypy,static-typing,Python,Mypy,Static Typing,我有一个类Animal,它有一个方法foo,根据可选参数bar后面的布尔参数inplace有不同的返回类型。我希望重载该函数,以便在inplace的值已知时,返回类型已知 这是我的密码: #main.py 从未来导入注释 从键入导入可选、重载、文本 动物类别: @超载 def foo(self,bar=…,inplace:Literal[False]=…)->Animal: ... @超载 def foo(self,bar=…,inplace:Literal[True]=…)->None: ..
Animal
,它有一个方法foo
,根据可选参数bar
后面的布尔参数inplace
有不同的返回类型。我希望重载该函数,以便在inplace
的值已知时,返回类型已知
这是我的密码:
#main.py
从未来导入注释
从键入导入可选、重载、文本
动物类别:
@超载
def foo(self,bar=…,inplace:Literal[False]=…)->Animal:
...
@超载
def foo(self,bar=…,inplace:Literal[True]=…)->None:
...
德福(
self,bar=None,inplace:bool=False
)->可选[动物]:
...
显示类型(Animal().foo(bar='a'))
显示类型(动物().foo(inplace=True))
显示类型(Animal().foo(inplace=False))
如何避免重载函数签名1和2与第8行的不兼容返回类型重叠错误?尝试:
@overload
def foo(self, inplace: Literal[False]=..., bar=...) -> Animal:
...
@overload
def foo(self, inplace: Literal[True], bar=...,) -> None:
...
def foo(self, inplace=False, bar=None):
...
我更改了args的顺序,否则第二次重载将不正确。这似乎有效:
from\uuuuu future\uuuuu导入注释
从键入导入可选、重载、文本
动物类别:
#使用默认值
@超载
def foo(self,bar=…,inplace:Literal[False]=…)->Animal:。。。
#使用就地=真
#带酒吧
@超载
def foo(self、bar、inplace:Literal[True])->None:。。。
#无栏
@超载
def foo(self,*,inplace:Literal[True])->None:。。。
#与布尔
@超载
def foo(self,bar=…,inplace:bool=…)->可选的[动物]:。。。
德福(
self,bar=None,inplace=False
):
...
显示类型(Animal().foo(bar='a'))
显示类型(Animal().foo(bar='a',inplace=True))
显示类型(Animal().foo(bar='a',inplace=False))
显示类型(动物().foo(inplace=True))
显示类型(Animal().foo(inplace=False))
显示类型(动物().foo())
原地:布尔
显示类型(动物().foo(bar='a',inplace=inplace))
显示类型(动物().foo(原地=原地))
很多重载,但这在这里可能是不可避免的我无法更改
def foo
中参数的顺序,恐怕这将是一个突破性的更改
@overload
def foo(self, inplace: Literal[False]=..., bar=...) -> Animal:
...
@overload
def foo(self, inplace: Literal[True], bar=...,) -> None:
...
def foo(self, inplace=False, bar=None):
...