📅  最后修改于: 2023-12-03 14:46:15.586000             🧑  作者: Mango
在Python中,我们可以使用自定义的排序规则对对象进行排序。在这种情况下,我们可以按照对象的属性来对它们进行排序。为了实现这个功能,我们可以自定义一个排序类,该类将在排序时使用指定的属性键。
class SortByAttribute:
def __init__(self, attribute):
self.attribute = attribute
def __call__(self, item):
return getattr(item, self.attribute)
def sort(self, items):
items.sort(key=self)
# 示例用法
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __repr__(self):
return f"Person('{self.name}', {self.age})"
people = [
Person("Alice", 25),
Person("Bob", 30),
Person("Charlie", 20)
]
sorter = SortByAttribute("age")
sorter.sort(people)
for person in people:
print(person)
上述代码演示了如何通过自定义排序类 SortByAttribute
来按照指定的属性排序对象列表。SortByAttribute
类包含一个属性 attribute
,该属性用于存储要排序的属性键。
SortByAttribute
类还定义了 __call__
方法,该方法允许对象实例像函数一样被调用。在此示例中,__call__
方法返回指定对象的特定属性的值。
sort
方法将一个对象列表作为参数,并使用 key
参数将列表按照指定属性进行排序。在内部,key
参数被设置为 self
,这将调用 SortByAttribute
实例,从而使对象列表按照指定属性进行排序。
在示例用法中,我们定义了一个 Person
类,该类具有 name
和 age
属性。我们创建了一些 Person
对象,并将它们放入一个列表中。然后,我们创建了一个 SortByAttribute
的实例,指定要按照 age
属性进行排序。最后,我们调用 sort
方法,并迭代打印排序后的结果。
通过自定义排序类,我们可以按照对象的属性轻松进行排序。这种方法在需要将对象列表按照特定属性进行排序的情况下非常有用。