В предыдущем проекте с использованием PyMon go я создал подкласс объекта Cursor. Я изменил поведение итератора, чтобы он возвращал объект, полученный из dict, возвращенного итератором Cursor. Выглядело это примерно так:
class EntityIterator(Cursor):
def __init__(self, entity_class, *args, **kwargs):
# initiate Cursor and set the class to return in iteration
super().__init__(app.mongo.db[entity_class.collection_name], *args, **kwargs)
self.entity_class = entity_class
def __next__(self):
# instead of normal dict, return an object derived from dict
return self.entity_class.new(super().next())
next = __next__
def __iter__(self):
return self
Теперь при итерации я получаю экземпляр нужного мне класса вместо обычного dict.
Теперь в документе Motor я нашел: "не инициируйте экземпляр курсора самостоятельно, вместо этого получите один из find () или aggregate ". Но я хочу изменить поведение итерации, так что это не урезает меня. Может быть, я упускаю очевидное решение, но кажется, что это нелегко сделать.
Есть идеи, как я мог go об этом?
Спасибо!