通过类属性字典Key对继承的类实例列表进行排序

时间:2017-05-03 20:12:10

标签: python class sorting class-method

是否有可能编写一个基类方法,通过字典中的键对类存储为静态类变量的类对象列表进行排序,该类是使用排序或排序的类的属性或者是否需要编写更精细的排序方法?

我是一个python noob,我试图使用sort& amp编写“my_sorter”方法。排序,尝试lambda键定义,itemgetter和attrgetter,我不确定我是否在语法上无法访问这些混合嵌套结构,或者如果没有编写更精细的排序例程来故意转移条目列表。

请注意,每个子类都有一个名为“mindex”的静态变量,用于标识其属性字典的“主键”(即要排序的唯一值)。 my_sorter()方法会是什么样的?

class Engine():
    storage = []

    @classmethod
    def my_sorter(cls):
        #sort cls.storage by cls.mindex

class Person(Engine):
    mindex = 'Name'

    def __init__(self, name):
        self.attributes = {
            'Name' : name,
        }

class Meeting (Engine):
    mindex = 'Date'

    def __init__(self, date):
        self.attributes = {
            'Date' : date,
        }

1 个答案:

答案 0 :(得分:1)

您无法在storage列表中显示对象的最终结果,但假设您的工作正常(并且您没有获得所有不同子类的对象组合)在Engine.storage意外地),排序应该非常简单。

@classmethod
def my_sorter(cls):
    return sorted(cls.storage, key=lambda obj: obj.attributes[cls.mindex])

虽然您的PersonMeeting类应该是Engine的子类,但我有点怀疑。这对我来说似乎不是一种IS-A关系。如果我了解整个项目设计,也许会更有意义。