普通文本  |  30行  |  853 B

# Copyright 2017 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

"""A common module for FAFT client."""

class LazyInitHandlerProxy:
    """Proxy of a given handler_class for lazy initialization."""
    _loaded = False
    _obj = None

    def __init__(self, handler_class, *args, **kargs):
        self._handler_class = handler_class
        self._args = args
        self._kargs = kargs

    def _load(self):
        self._obj = self._handler_class()
        self._obj.init(*self._args, **self._kargs)
        self._loaded = True

    def __getattr__(self, name):
        if not self._loaded:
            self._load()
        return getattr(self._obj, name)

    def reload(self):
        """Reload the handler class."""
        self._loaded = False