Я ищу способ кодирования пользовательских объектов для dict в Python с помощью декоратора класса, чтобы предоставить имя переменных, которые должны быть включены в результирующий dict в качестве аргументов. С помощью dict я смогу использовать json.dumps(custom_object_dict)
, чтобы преобразовать JSON.Кодирование пользовательских объектов с помощью декораторов - Python
Другими словами, идея состоит в том, чтобы иметь следующий @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")])
Этот декоратор позволит мне сделать что-то похожее на следующее:
Вариант А:
json = json.dumps(course.to_dict())
Вариант B:
json = json.dumps(course.dict_representation)
... Или что-то тому подобное
Таким образом, вопрос: Как написать этот кодер, где только реальные требования:
- кодировщик должен закодировать только переменные, которые предоставляются через декоратор
- кодировщик должен быть в состоянии кодировать другие объекты (например, профессор внутри курсов, если класс профессора также имеет декоратор
@encoder
- следует также иметь возможность кодировать список других объектов (например: студенты в курсе, считая что студенты класса также должны
@encoder
декоратора)
Я исследовал различные способы сделать это (в том числе создание класса, который наследует от json.JSONEncoder), но никто не казалось, делать то, что я имел в виду. Кто-нибудь сможет мне помочь?
Заранее благодарен!
Это именно то, что я искал! Спасибо! –
Добро пожаловать. – Hyperboreus