Python 按类属性字典键对继承的类实例列表进行排序
是否可以编写一个基类方法,通过字典中的键对子类中作为静态类变量存储的类对象列表进行排序,该键是使用sort或sorted的类的属性,或者是否需要编写更详细的排序方法 我是PythonNoob,我尝试使用sort&sorted编写“my_sorter”方法,尝试lambda键定义itemgetter,还有attrgetter,我不确定访问这些混合嵌套结构的语法是否失败,或者如果不编写一个更复杂的排序例程来故意在列表中移动条目,这是不可能的 请注意,每个子类都有一个名为“mindex”的静态变量,该变量标识其属性字典的“主键”(即排序依据的唯一值)。 my_sorter()方法是什么样的Python 按类属性字典键对继承的类实例列表进行排序,python,class,sorting,class-method,Python,Class,Sorting,Class Method,是否可以编写一个基类方法,通过字典中的键对子类中作为静态类变量存储的类对象列表进行排序,该键是使用sort或sorted的类的属性,或者是否需要编写更详细的排序方法 我是PythonNoob,我尝试使用sort&sorted编写“my_sorter”方法,尝试lambda键定义itemgetter,还有attrgetter,我不确定访问这些混合嵌套结构的语法是否失败,或者如果不编写一个更复杂的排序例程来故意在列表中移动条目,这是不可能的 请注意,每个子类都有一个名为“mindex”的静态变量,该
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,
}
您不会在
存储
列表的任何地方显示您的对象是如何结束的,但是假设您的对象工作正常(并且您没有意外地在引擎.storage
中混合使用不同子类的对象),排序应该非常简单
@classmethod
def my_sorter(cls):
return sorted(cls.storage, key=lambda obj: obj.attributes[cls.mindex])
但是我有点怀疑你的
人
和会议
类是否应该是引擎
的子类。对我来说,这不像是一种关系。如果我了解整个项目设计,可能会更有意义。是否可以编写一个基类方法,通过字典中的键对子类中作为静态类变量存储的类对象列表进行排序,这是使用sort或sorted的类的属性,还是需要编写一个更详细的排序方法?请再说一遍:哦?!您能否提供一个示例,说明您希望该方法做什么?Person
和Meeting
将以这种方式共享相同的存储
列表。这真的是你想要的吗?(您可能根本不应该将storage
设置为类属性;它是可变的全局状态,可能不是这些类的责任。此外,您还有卷曲的引号。这会导致问题。)