提问人:geckels1 提问时间:6/20/2023 更新时间:6/25/2023 访问量:118
每次使用 datetime 计算时都计算 Pyton 枚举?
Calculate Pyton Enum each time when evaluated with datetime?
问:
有没有办法在 Python 中创建一个在每次访问属性时计算值的方法?具体来说,我正在尝试创建一个类,该类为运行多天的 Web 应用程序(在 Django 中)存储 、 等值,我希望每次访问时重新计算该值,以防日期发生变化。因此,假设该应用程序于 3 月 1 日启动,如果该应用程序在 3 月 3 日进行检查,它将返回 3 月 3 日,而不是 3 月 1 日,这是它初始化的目的。Enum
Enum
Enum
TODAY
TOMORROW
TODAY
from enum import Enum
import datetime
class MyEnum(Enum):
TODAY = datetime.datetime.now()
TOMORROW = datetime.datetime.now() + datetime.timedelta(days=1)
答:
1赞
willeM_ Van Onsem
6/25/2023
#1
您可以通过对描述符进行编程来做到这一点,例如:
from datetime import datetime, timedelta
from enum import Enum
class DtDiff:
def __init__(self, delta=timedelta()):
self.delta = delta
def __get__(self, obj, objtype=None):
return datetime.now() + self.delta
class MyEnum(Enum):
TODAY = DtDiff()
TOMORROW = DtDiff(timedelta(days=1))
但在这种情况下,这甚至会使枚举的大多数功能无效,因此这可能不是一个好主意。
可能更好的方法是在 上定义一个函数,例如:Enum
from datetime import datetime, timedelta
from enum import Enum
class MyEnum(Enum):
TODAY = timedelta(0)
TOMORROW = timedelta(days=1)
@property
def timestamp(self):
return datetime.now() + self.value
然后,您可以使用以下命令获取时间戳:
>>> MyEnum.TODAY.timestamp
datetime.datetime(2023, 6, 24, 19, 32, 41, 854253)
这看起来像是获取枚举选择的时间戳的最少工作量。
评论
0赞
geckels1
6/25/2023
我坚持使用一个简单的函数,但我喜欢这两个答案!尤其是描述符,即使它确实破坏了大部分 Enum 函数。这些正是我一直在寻找的答案。
评论
TODAY
TOMORROW