Mypy/Pylance 不检查嵌套协议

问题描述 投票:0回答:1

我正在使用协议来定义一些基类
我只想继承父协议并自动检查子协议类型。

这是示例代码:

class Child(Protocol):
   name: str


class Parent(Protocol):
   Child: Child


class FooBar(Parent):
   class Child:
       pass
       # No Error

为什么 Mypy/Pylance 没有推断出

Child
协议需要
name

python types mypy pylance
1个回答
0
投票

这是

mypy
中的已知限制,这是相应的 issue。正如评论中指出的,Pyright 正确检测到这种类型违规。如果您在外部定义类型并分配,
mypy
也会识别错误:

from typing import Protocol


class Child(Protocol):
   name: str

class Parent(Protocol):
   Child: Child

class _Child:
    pass

class FooBar(Parent):
    Child = _Child  # E: Incompatible types in assignment (expression has type "type[_Child]", base class "Parent" defined the type as "Child")  [assignment]
© www.soinside.com 2019 - 2024. All rights reserved.