gpt4 book ai didi

python - 如何 JSON 序列化对象并包含 @property 属性,同时排除函数?

转载 作者:行者123 更新时间:2023-12-01 07:51:06 29 4
gpt4 key购买 nike

有很多与此相关的问题,但没有给出我想要的。

假设我有一个这样的类(class):

import json


class MyClass:

def __init__(self, name, some_type):

self.name = name
self.some_type = some_type

@property
def prop(self):

return self.name + self.some_type

def to_json(self):

return json.dumps(
self, default=lambda o: o.__dict__
)


el1 = MyClass('test', '_to_json')

我现在想要获取一个 JSON 表示形式,其中包括 namesome_type 以及 prop

函数to_json目前仅返回

{"name": "test", "some_type": "_to_json"}

so prop 缺失(以及 vars(el1) 中)。

dir 返回(以及所有 __)

'name', 'prop', 'some_type', 'to_json'

并且我不希望列表中包含 to_json

是否有一种简单的方法来更新我的 to_json 函数以使其返回

{"name": "test", "some_type": "_to_json", "prop": "test_to_json"}

最佳答案

您可以在__class__.__dict__中找到prop:

import json


class MyClass:

def __init__(self, name, some_type):

self.name = name
self.some_type = some_type

@property
def prop(self):

return self.name + self.some_type

def to_json(self):
def get_object_dict(obj):
d = obj.__dict__.copy()
for key, value in obj.__class__.__dict__.items():
if isinstance(value, property):
d[key] = getattr(obj, key)
return d


return json.dumps(
self, default=lambda o: get_object_dict(o)
)


el1 = MyClass('test', '_to_json')
print(el1.to_json())

输出:

{"prop": "test_to_json", "some_type": "_to_json", "name": "test"}

关于python - 如何 JSON 序列化对象并包含 @property 属性,同时排除函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56212416/

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