Python:如何将自定义 class 成员与内置类型进行比较

Python: how to compare custom class member to builtin type

python 的新手所以如果这很明显请原谅我。 假设我已经创建了一个自定义 class Foo,并制作了一个 Foo() 实例与 int 混合的列表,例如:

foo_list = [Foo() for _ in range(10)]
for i in range(10):
  foo_list.append(i)
# then the foo_list is mixed with Foo()s and ints

Foo 实例如何与 int 进行比较?基本上我的目标是使 sort() 上面的列表成为可能。

您可以为 python sort() 函数指定自定义函数,请参阅文档中的 the "key" function 排序函数。

例如,如果 Foo 有一个类似整数的字段 bar,您可以根据 bar 的值对 Foo 的每个实例进行排序这个:

def custom_key_function(element):
    if isinstance(element, Foo):
        return element.bar
    else:
        return element  # element is just an int

foo_list.sort(key=custom_key_function)

注意 isinstance 的用法,它将告诉您某物是否是 Foo.

的实例

我不知道你的 Foo 有哪些字段,但只要你的 custom_key_functionFoo 转换为可以与 int 进行比较的东西你应该好好的。

您可以将 __lt____gt__ 方法添加到 Foo class(小于和大于),将 Foo 对象评估为小于大于或大于整数,sort 在未提供关键函数时使用

class Foo():

    def __lt__(self, other):
        if isinstance(other, int):
            return self._id < other
        elif isinstance(other, self.__class__):
            return self._id < other._id

    def __gt__(self, other):
        if isinstance(other, int):
            return self._id > other
        elif isinstance(other, self.__class__):
            return self._id > other._id