我想为数据类定义一个接口,但保留数据存储方式。为此,我为接口定义了一个协议
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 并不真正喜欢它。
我该如何更好地写这个?
# 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