gpt4 book ai didi

python - 使用保留字 "class"定义数据类的属性并将其序列化

转载 作者:行者123 更新时间:2023-12-02 11:18:50 25 4
gpt4 key购买 nike

好的,我正在尝试定义一个数据类以在redis中为sidekiq worker 加入一个工作,sidekiq有效负载的规范要求某些属性具有以下格式:

{
"class": "SomeWorker",
"queue": "default"
"jid": "b4a577edbccf1d805744efa9", // 12-byte random number as 24 char hex string
"args": [......],
"created_at": 1234567890,
"enqueued_at": 1234567890
}

因此,我在python代码中定义了一个数据类:
@dataclass
class PusherNotificationJob:
args: Any = None
queue: str = "default"
jid: str = secrets.token_hex(12)
retry: bool = True
created_at: datetime.datetime = time.time()
enqueued_at: datetime.datetime = time.time()

def asdict(self):
return {** self.__dict__, "class": "SomeWorker"}

我的问题是我不能将“class”定义为PusherNotificationJob的属性,因为它是保留字。因此,我需要定义asdict方法以将其序列化为dict并添加我在此处添加的“class”属性。

有更好的方法吗?

最佳答案

在回答之前,需要注意一些事项:只要代码运行,created_at和enqueued_at的值将相同。如果您希望时间是在创建实例时,请使用:created_at: datetime.datetime = field(default_factory=time.time)继续:
您可以覆盖__iter__以使用dict(instance)。如果您有一个名为class_: str = 'SomeWorker'的属性,则可能如下所示

def __iter__(self):
for key in self.__dict__:
if key == 'class_':
key = 'class'
yield key, self.__dict__
如果需要 __iter__正常运行,请使用以下命令:
def convert_keys(self):
for key in self.__dict__:
value = self.__dict__[key]
if key == 'class_':
key = 'class'
yield key, value

def asdict(self):
return {key: value for key, value in self.convert_keys()}

关于python - 使用保留字 "class"定义数据类的属性并将其序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55712001/

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