python-3.x 如何正确使用排序键函数的类型

0dxa2lsx  于 2022-12-01  发布在  Python
关注(0)|答案(1)|浏览(234)

对于此排序关键字方法:

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的调用。但我更愿意正确地执行此操作。
我显然做错了什么,但是什么呢?即使没有好的方法来做这件事,我也想知道为什么我会抱怨。

umuewwlo

umuewwlo1#

您正在传递一个返回Optional[int]的函数,但需要一个返回SupportsLessThan的函数。Optional[int]不支持“小于”,因为None不能与任何int进行比较。
支持“小于”的只有int,所以你可以把函数的返回类型改为int,在r不是Colour的特殊情况下,让它返回一个整数,而不是None

  • 在这种情况下,它应该返回哪个 * 整数取决于您试图实现的目标。如果您希望任何非Colour值排在任何Colour值之前,可能您可以返回-1,因为它将小于任何r.index值(至少我希望从称为“index”的东西中得到这个结果)。

相关问题