【问题标题】:Python class utcnow not updatingPython 类 utcnow 未更新
【发布时间】:2021-03-11 22:20:53
【问题描述】:

我已经在 Python 中设置了一个简单的类,其中发布了一个默认为 utcnow() 时间的成员作为字符串。但是,当我创建该类的一个实例然后在几分钟后创建另一个实例时,它们都具有完全相同的发布时间。 如果在我创建的路线中,我通过posted=str(datetime.utcnow()) 它工作正常,因此 Python 可以正确获取计算机日期时间。我还在运行的 Heroku 应用程序上对此进行了测试,但遇到了同样的问题。 它放入的时间是应用程序首次运行的时间,就好像它被视为静态值一样。

import uuid
from datetime import datetime
from typing import Dict
from dataclasses import dataclass, field
from models.model import Model


@dataclass
class Dummy(Model):
    collection: str = field(init=False, default='dummy')
    text: str
    posted: str = field(default=str(datetime.utcnow()))
    _id: str = field(default_factory=lambda: uuid.uuid4().hex)

    def json(self) -> Dict:
        return {
            "text": self.text,
            "posted": self.posted,
            "_id": self._id
        }

【问题讨论】:

  • 为什么不在类中添加和__init__并在其中设置posted?每次创建类的实例时都应该设置属性。顺便提一下this

标签: python class default-value python-datetime


【解决方案1】:

如果您需要动态默认值,您可以使用 default_factory


@dataclass
class Dummy(Model):
    ...
    posted: str = field(default_factory=lambda: str(datetime.utcnow()))
    

【讨论】:

    猜你喜欢
    • 2022-01-14
    • 2019-04-07
    • 2018-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多