U
    Ú~fhÿ  ã                   @   s,   d dl Z G dd„ deƒZG dd„ deƒZdS )é    Nc                       s,   e Zd ZdZ‡ fdd„Z‡ fdd„Z‡  ZS )Ú	Singletonz›
    Singleton metaclass
    Based on Python Cookbook 3rd Edition Recipe 9.13
    Only one instance of a class can exist. Does not work with __slots__
    c                    s   t ƒ j||Ž d | _d S ©N)ÚsuperÚ__init__Ú_Singleton__instance©ÚselfÚargsÚkw©Ú	__class__© ú=/tmp/pip-unpacked-wheel-eyn_au5k/openpyxl/compat/singleton.pyr      s    zSingleton.__init__c                    s    | j d krtƒ j||Ž| _ | j S r   )r   r   Ú__call__r   r   r   r   r      s    
zSingleton.__call__©Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   Ú__classcell__r   r   r   r   r      s   r   c                       s,   e Zd ZdZ‡ fdd„Z‡ fdd„Z‡  ZS )ÚCachedz™
    Caching metaclass
    Child classes will only create new instances of themselves if
    one doesn't already exist. Does not work with __slots__
    c                    s   t ƒ j||Ž t ¡ | _d S r   )r   r   ÚweakrefÚWeakValueDictionaryÚ_Cached__cacher   r   r   r   r      s    zCached.__init__c                    s.   || j kr| j | S tƒ j|Ž }|| j |< |S r   )r   r   r   )r   r	   Úobjr   r   r   r   "   s
    


zCached.__call__r   r   r   r   r   r      s   r   )r   Útyper   r   r   r   r   r   Ú<module>   s   