@dataclass(frozen=True, eq=True, order=True)
class C:
x: int
l = [C(1), C(2), C(1)]
print(sorted(l))上面的代码工作,但给出了一个警告:Expected type 'Iterable' (matched generic type 'Iterable[SupportsLessThanT]'), got 'list[C]' instead。
我认为传递给@dataclass的@dataclass参数应该导致__lt__等的生成,从而确认为SupportsLessThanT。
__lt__的显式实现可以沉默警告,但是我如何在没有警告的情况下保持沉默呢?
发布于 2022-10-09 12:23:15
显然是PyCharm中一个已知的bug,跟踪了这里
发布于 2022-10-10 14:09:34
只是为了在这里添加一些附加的上下文,因为在bug跟踪器中似乎没有明确提到.
这是一个bug,很可能是因为dataclass魔术正在添加方法和注释,动态地添加。一些不是在本质上的静态类型检查器来挑选。他们用特殊的插件来解决这种情况,这些插件是根据特定的规范量身定做的。
当人们试图在自己的代码中模仿dataclass-like行为时,即在运行时构建签名和/或添加注释时,就会出现一个相关的问题。他们总是遇到相同的障碍,静态类型检查完全无视他们的意图。
静态类型检查器不会执行您的代码,它们只是读取它。
相关信息:
我和JetBrains的人没有任何联系。我只是想指出这一点是公平的,因为我认为这是一个更“可原谅”的错误,因为他们被迫“黑客”佩普557。
https://stackoverflow.com/questions/74003752
复制相似问题