A general class for lazy loading expensive modules.

Expand source code
"""
A general class for lazy loading expensive modules.
"""

import importlib


class LazyLoader:
    """
    A general class for lazy loading expensive modules.

    Modules will only be fully loaded when any of their members are first accessed.

    Parameters
    ----------
    module_name: str
        Name of the module to lazy load

    Examples
    --------
    >>> tp = LazyLoader("tomotopy")
    >>> vars(tp)
    {'module_name': 'tomotopy', '_module': None}
    >>> tp.__version__
    '0.10.1'
    >>> tp._module is None
    False
    """

    def __init__(self, module_name):
        self.module_name = module_name
        self._module = None

    def __getattr__(self, item):
        if self._module is None:
            self._module = importlib.import_module(self.module_name)
        return getattr(self._module, item)

Classes

class LazyLoader (module_name)

A general class for lazy loading expensive modules.

Modules will only be fully loaded when any of their members are first accessed.

Parameters

module_name : str
Name of the module to lazy load

Examples

>>> tp = LazyLoader("tomotopy")
>>> vars(tp)
{'module_name': 'tomotopy', '_module': None}
>>> tp.__version__
'0.10.1'
>>> tp._module is None
False
Expand source code
class LazyLoader:
    """
    A general class for lazy loading expensive modules.

    Modules will only be fully loaded when any of their members are first accessed.

    Parameters
    ----------
    module_name: str
        Name of the module to lazy load

    Examples
    --------
    >>> tp = LazyLoader("tomotopy")
    >>> vars(tp)
    {'module_name': 'tomotopy', '_module': None}
    >>> tp.__version__
    '0.10.1'
    >>> tp._module is None
    False
    """

    def __init__(self, module_name):
        self.module_name = module_name
        self._module = None

    def __getattr__(self, item):
        if self._module is None:
            self._module = importlib.import_module(self.module_name)
        return getattr(self._module, item)