def initAddons(cls, recurse=True):
        """
        Loads different addon modules for this class.  This method
        should not be overloaded in a subclass as it also manages the loaded
        state to avoid duplicate loads.  Instead, you can re-implement the
        _initAddons method for custom loading.
        
        :param      recurse | <bool>
        """
        key = '_{0}__addons_loaded'.format(cls.__name__)
        if getattr(cls, key, False):
            return

        cls._initAddons(recurse)
        setattr(cls, key, True)
Loads different addon modules for this class.  This method
        should not be overloaded in a subclass as it also manages the loaded
        state to avoid duplicate loads.  Instead, you can re-implement the
        _initAddons method for custom loading.
        
        :param      recurse | <bool>