Расширение Flask, например Flask-PyMongo: почему я не могу изменить название коллекции? - PullRequest
0 голосов
/ 25 марта 2012

В 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?

...