📜  python 按属性排序类 - Python (1)

📅  最后修改于: 2023-12-03 14:46:15.586000             🧑  作者: Mango

Python 按属性排序类

在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 类,该类具有 nameage 属性。我们创建了一些 Person 对象,并将它们放入一个列表中。然后,我们创建了一个 SortByAttribute 的实例,指定要按照 age 属性进行排序。最后,我们调用 sort 方法,并迭代打印排序后的结果。

结论

通过自定义排序类,我们可以按照对象的属性轻松进行排序。这种方法在需要将对象列表按照特定属性进行排序的情况下非常有用。