按 class 属性字典键对继承的 class 实例列表进行排序
Sorting a list of inherited class instances by a class attribute dictionary Key
是否可以编写基本 class 方法来对 class objects 的列表进行排序,存储为静态 class 变量,在 child class,通过字典中的一个键,即 class 的一个属性 using sort or sorted 或者是否需要编写更详细的排序方法?
我是一个 python 菜鸟,我尝试使用 sort 和 sorted 编写“my_sorter”方法,尝试使用 lambda 键定义、itemgetter 和 attrgetter 但我没有确定我是否无法访问这些混合嵌套结构的语法,或者如果不编写更详细的排序例程来故意移动列表中的条目就不可能。
请注意,每个 child class 都有一个名为“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,
}
你没有在任何地方显示你的对象是如何在 storage
列表中结束的,但假设你的工作正常(并且你没有得到不同子[=20的对象的混合) =] 都在 Engine.storage
意外),排序应该很简单。
@classmethod
def my_sorter(cls):
return sorted(cls.storage, key=lambda obj: obj.attributes[cls.mindex])
我有点怀疑你的 Person
和 Meeting
类 是否应该是 Engine
的子 类。对我来说,这似乎不像是 IS-A 关系。如果我知道整个项目设计,也许会更有意义。
是否可以编写基本 class 方法来对 class objects 的列表进行排序,存储为静态 class 变量,在 child class,通过字典中的一个键,即 class 的一个属性 using sort or sorted 或者是否需要编写更详细的排序方法?
我是一个 python 菜鸟,我尝试使用 sort 和 sorted 编写“my_sorter”方法,尝试使用 lambda 键定义、itemgetter 和 attrgetter 但我没有确定我是否无法访问这些混合嵌套结构的语法,或者如果不编写更详细的排序例程来故意移动列表中的条目就不可能。
请注意,每个 child class 都有一个名为“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,
}
你没有在任何地方显示你的对象是如何在 storage
列表中结束的,但假设你的工作正常(并且你没有得到不同子[=20的对象的混合) =] 都在 Engine.storage
意外),排序应该很简单。
@classmethod
def my_sorter(cls):
return sorted(cls.storage, key=lambda obj: obj.attributes[cls.mindex])
我有点怀疑你的 Person
和 Meeting
类 是否应该是 Engine
的子 类。对我来说,这似乎不像是 IS-A 关系。如果我知道整个项目设计,也许会更有意义。