gpt4 book ai didi

python - 获取下一个枚举器常量/属性

转载 作者:太空狗 更新时间:2023-10-29 20:20:05 26 4
gpt4 key购买 nike

假设我有一个枚举器,是否有可能获得后面的属性?因此,如果我有 today=Days.Sunday,我是否能够执行类似 tomorrow=today.next() 的操作?

例子:

class Days(Enum):
Sunday = 'S'
Monday = 'M'
...
Saturday = 'Sa'

我知道我可以使用元组(如下所示)来执行类似 tomorrow=today[1] 的操作,但我希望有一些内置的或更优雅的东西。

class Days(Enum):
Sunday = ('S','Monday')
Monday = ('M','Tuesday')
...
Saturday = ('Sa','Sunday')

最佳答案

当然。

只需将所需的功能添加到您的 Days 类中:

class Days(Enum):

Sunday = 'S'
Monday = 'M'
Tuesday = 'T'
Wednesday = 'W'
Thursday = 'Th'
Friday = 'F'
Saturday = 'Sa'

def next(self):
cls = self.__class__
members = list(cls)
index = members.index(self) + 1
if index >= len(members):
index = 0
return members[index]

并在使用中:

today = Days.Wednesday
print(today.next())
# Days.Thursday

虽然上面的内容可能更容易理解,但可以通过向每个成员添加一个 next 属性(和 previous 当我们这样做的时候)。

class Days(Enum):
#
Sunday = 'S'
Monday = 'M'
Tuesday = 'T'
Wednesday = 'W'
Thursday = 'Th'
Friday = 'F'
Saturday = 'Sa'
#
def __init__(self, value):
if len(self.__class__):
# make links
all = list(self.__class__)
first, previous = all[0], all[-1]
previous.next = self
self.previous = previous
self.next = first

并在使用中:

>>> Days.Tuesday.next
<Days.Wednesday: 'W'>

>>> Days.Tuesday.previous
<Days.Monday: 'M'>

>>> Days.Saturday.next
<Days.Sunday: 'S'>

>>> Days.Saturday.previous
<Days.Friday: 'F'>

NB 使用属性的这个方法意味着我们不再需要 next/previous 之后的 () >.

关于python - 获取下一个枚举器常量/属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26577621/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com