PyCharm 警告:从协议实现属性时,“字段”类型与“A”不兼容

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

我想为数据类定义一个接口,但保留数据存储方式。为此,我为接口定义了一个协议

A
和一个实现
B

class A(Protocol):
    @property
    def field(self):
        ...

    @field.setter
    def field(self, value):
        ...


class B(A):
    @property
    def field(self):
        return ""

    @field.setter
    def field(self, value):
        pass

mypy
此实现没有任何问题,但 PyCharm 警告我

Type of 'field' is incompatible with 'A' 

上述方法已经在这个答案中提出,但 PyCharm 并不真正喜欢它。

我该如何更好地写这个?

python pycharm python-typing
1个回答
0
投票

这是已知的错误。将 a

# noqa
# noinspection
评论
放在那里,然后继续。


然而,另一方面,该协议可以而且应该是通用的:

from typing import Protocol, override

class A[T](Protocol):
    @property
    def field(self) -> T: ...

    @field.setter
    def field(self, value: T) -> None: ...

class B(A[str]):
    @override
    def field(self) -> str:
        return ''

    @override
    @field.setter
    def field(self, value: str) -> None:
        pass
© www.soinside.com 2019 - 2024. All rights reserved.