从命名的tuple启动“超载功能签名1和2与不兼容的返回类型重叠”

问题描述 投票:0回答:1
我认为这是mypy中的一个错误,但我不确定:

from typing import overload, NamedTuple class A(NamedTuple): pass class B(NamedTuple): pass @overload def frobnicate(arg: A) -> A: ... @overload def frobnicate(arg: B) -> B: ... def frobnicate(arg: A | B) -> A | B: if isinstance(arg, A): return A() elif isinstance(arg, B): return B() else: raise TypeError()
该代码使Mypy发出:

error: Overloaded function signatures 1 and 2 overlap with incompatible return types [overload-overlap]
播放它:

https://mypy-play.net/?mypy =最新&python = 3.12&gist =38e025ef049b6a1121cdd92c9998e844a9 this是在从

NamedTuple

tuple
dict
object
A | B
继承时专门发生的。

我应该在mypy上提出问题,还是由于我不考虑的事情而引起的预期行为?

python overloading mypy namedtuple
1个回答
0
投票
A

,则返回类型为

A
,并且对于
B
。您可以使用通用
TypeVar
指定此约束:
from typing import overload, NamedTuple

class A(NamedTuple):
    pass

class B(NamedTuple):
    pass

from typing import TypeVar

T = TypeVar("T", A, B)

def frobnicate(arg: T) -> T:
    return arg
    

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.