我正在寻找一种使用类装饰器将自定义对象编码为 Python 中的 dict 的方法,以提供应作为参数包含在结果 dict 中的变量的名称。有了 dict,我就可以用来json.dumps(custom_object_dict)
转换为 JSON。
换句话说,这个想法是有以下@encoder
类装饰器:
@encoder(variables=['firstname', 'lastname'], objects=['professor'], lists=['students'])
class Course(Object):
def __init__(self, firstname, lastname, professor, students):
self.firstname = firstname
self.lastname = lastname
self.professor = professor
self.students = students
#instance of Course:
course = Course("john", "smith", Professor(), [Student(1), Student(2, "john")])
这个装饰器可以让我做类似于以下的事情:
选项 A:
json = json.dumps(course.to_dict())
选项 B:
json = json.dumps(course.dict_representation)
...或类似的东西
所以问题是:如何编写这个编码器,唯一真正的要求是:
- 编码器应该只编码通过装饰器提供的变量
- 编码器应该能够编码其他对象(例如:课程中的教授,如果教授类也有装饰器
@encoder
- 还应该能够编码其他对象的列表(例如:课程内的学生,计算班级学生也必须
@encoder
装饰)
我研究了不同的方法(包括创建一个继承自 json.JSONEncoder 的类),但似乎没有一个完全符合我的想法。有人可以帮助我吗?
提前致谢!