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_function
将 Foo
转换为可以与 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
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_function
将 Foo
转换为可以与 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