对于此排序关键字方法:
def srt(self,r:Optional[Colour])->Optional[int]:
if not isinstance(r,Colour):
return None
return r.index
在同一类的后面方法中使用(非颜色):
items=sorted(self.__dict__.values(),key=self.srt)
从mypy中产生此错误:
error: Argument "key" to "sorted" has incompatible type "Callable[[Optional[Colour]], Optional[int]]"; expected "Callable[[Any], SupportsLessThan]" [arg-type]
我可以通过强制srt()使用它想要的签名,或者通过输入一个类型来关闭它:忽略对sorted的调用。但我更愿意正确地执行此操作。
我显然做错了什么,但是什么呢?即使没有好的方法来做这件事,我也想知道为什么我会抱怨。
1条答案
按热度按时间umuewwlo1#
您正在传递一个返回
Optional[int]
的函数,但需要一个返回SupportsLessThan
的函数。Optional[int]
不支持“小于”,因为None
不能与任何int
进行比较。支持“小于”的只有
int
,所以你可以把函数的返回类型改为int
,在r
不是Colour
的特殊情况下,让它返回一个整数,而不是None
。Colour
值排在任何Colour
值之前,可能您可以返回-1
,因为它将小于任何r.index
值(至少我希望从称为“index”的东西中得到这个结果)。