3

見てみるとdjango.utils.functional、クラスに気づきましたLazyObject。djangoはそれをdjango.conf次の場所で使用しています。

class LazySettings(LazyObject):

それはの定義ですLazyObject

class LazyObject(object):
    """
    A wrapper for another class that can be used to delay instantiation of the
    wrapped class.

    By subclassing, you have the opportunity to intercept and alter the
    instantiation. If you don't need to do that, use SimpleLazyObject.
    """
    def __init__(self):
        self._wrapped = None

    def __getattr__(self, name):
        if self._wrapped is None:
            self._setup()
        return getattr(self._wrapped, name)

    def __setattr__(self, name, value):
        if name == "_wrapped":
            # Assign to __dict__ to avoid infinite __setattr__ loops.
            self.__dict__["_wrapped"] = value
        else:
            if self._wrapped is None:
                self._setup()
            setattr(self._wrapped, name, value)

    def __delattr__(self, name):
        if name == "_wrapped":
            raise TypeError("can't delete _wrapped.")
        if self._wrapped is None:
            self._setup()
        delattr(self._wrapped, name)

    def _setup(self):
        """
        Must be implemented by subclasses to initialise the wrapped object.
        """
        raise NotImplementedError

    # introspection support:
    __members__ = property(lambda self: self.__dir__())

    def __dir__(self):
        if self._wrapped is None:
            self._setup()
        return  dir(self._wrapped)

使用するのに最適な状況を知りたいLazyObjectですか?

4

1 に答える 1

1

それはexpに基づいています。私が知っているように:
1。データを取得し、今は使用せずに、djangoのQuerySetのように操作します
。2。データuは、構成のように、今どこにデータをロード/読み取るかを指示できます。
3.プロキシ
4.大量のデータセットを使用して、その一部を使用します。
もっと...

于 2012-10-27T03:07:47.523 に答える