В Flask-PyMongo они используют self._Collection__database
для представления объекта базы данных, к которому принадлежит этот объект Collection:
class Collection(collection.Collection):
"""Custom sub-class of :class:`pymongo.collection.Collection` which
adds Flask-specific helper methods.
"""
def __getattr__(self, name):
attr = super(Collection, self).__getattr__(name)
if isinstance(attr, collection.Collection):
db = self._Collection__database
return Collection(db, attr.name)
return attr
Работает нормально.В то время как я хочу определить другой
класс CollectionV (collection.Collection)
класс по какой-то причине (причина: я хочу, чтобы операция «удалить» изменяла толькозначение поля от «видимого» до «удаленного»), определение класса:
class CollectionV(collection.Collection):
"""Custom sub-class of :class:`pymongo.collection.Collection` which
adds Flask-specific helper methods.
"""
def __getattr__(self, name):
attr = super(CollectionV, self).__getattr__(name)
if isinstance(attr, collection.Collection):
db = self._CollectionV__database
return CollectionV(db, attr.name)
return attr
Затем я получил ошибку 'RuntimeError: maximum recursion depth exceeded'
, журнал ошибок показывает, что "self._CollectionV__database"
был обработан как коллекция, и он продолжаетвызывайте __getattr__()
рекурсивно.
, почему использование "self._Collection__database"
в class Collection(collection.Collection)
в порядке, в то время как это вызывает проблемы в CollectionV
?