Python 重载方法并调用super

Python 重载方法并调用super,python,mypy,static-typing,Python,Mypy,Static Typing,我有一个类Animal,它有一个方法foo,其返回类型取决于inplace的值 同样,对于子类Cat 到目前为止,一切顺利。但是,如果我在Cat中调用super() from\uuuuu future\uuuuu导入注释 从键入导入可选、重载、文本、TypeVar CatOrDog=TypeVar('CatOrDog',bound='Animal') 动物类别: @超载 def foo(self:CatOrDog,inplace:Literal[False]=…)->CatOrDog:。。。 @

我有一个类
Animal
,它有一个方法
foo
,其返回类型取决于
inplace
的值

同样,对于子类
Cat

到目前为止,一切顺利。但是,如果我在
Cat
中调用
super()

from\uuuuu future\uuuuu导入注释
从键入导入可选、重载、文本、TypeVar
CatOrDog=TypeVar('CatOrDog',bound='Animal')
动物类别:
@超载
def foo(self:CatOrDog,inplace:Literal[False]=…)->CatOrDog:。。。
@超载
def foo(self:CatOrDog,inplace:Literal[True])->None:。。。
德福(
self:CatOrDog,inplace:bool=False
)->可选[CatOrDog]:
...
类别猫(动物):
@超载
def foo(self,inplace:Literal[False]=…)->Cat:。。。
@超载
def foo(self,inplace:Literal[True])->None:。。。
def foo(自身,就地:bool=False):
返回super().foo(inplace=inplace)


我不明白为什么它会失败-
Animal
确实有一个重载变量
foo
,它与参数类型
bool

相匹配。注意,你没有一个重载变量带有
inplace:bool
-该方法的第三个定义不是重载,这是运行时实现,被type-checker忽略。Legend@jonrsharpe解决了这个问题,谢谢!真的有必要用一小步的进步来问这个问题吗?当然,你需要解决一些实际案例——为什么不问问呢?实际案例太大了,不适合一个独立的、可复制的小例子。真的有必要发表这样的恶作剧评论吗?@这不是恶作剧,而是一个诚实的调查。过于具体的渐进式问题可能会限制可能的答案,并意外地引导您找到一个不太理想的解决方案。当然,在一天结束时,你是唯一能够决定这些问题是否值得的人。
main.py:31: error: No overload variant of "foo" of "Animal" matches argument type "bool"
main.py:31: note: Possible overload variants:
main.py:31: note:     def foo(self, inplace: Literal[False] = ...) -> Cat
main.py:31: note:     def foo(self, inplace: Literal[True]) -> None
Found 1 error in 1 file (checked 1 source file)