B
    P•\b  ã               @   s8   d dl mZ d dlZG dd„ deƒZG dd„ deƒZdS )é    )Úabsolute_importNc                   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 t| ƒj||Ž d | _d S )N)Úsuperr   Ú__init__Ú_Singleton__instance)ÚselfÚargsÚkw)Ú	__class__© ú8lib/python3.7/site-packages/openpyxl/compat/singleton.pyr      s    zSingleton.__init__c                s$   | j d krtt| ƒj||Ž| _ | j S )N)r   r   r   Ú__call__)r   r   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 t| ƒj||Ž t ¡ | _d S )N)r   r   r   ÚweakrefÚWeakValueDictionaryÚ_Cached__cache)r   r   r	   )r
   r   r   r      s    zCached.__init__c                s2   || j kr| j | S tt| ƒj|Ž }|| j |< |S )N)r   r   r   r   )r   r   Úobj)r
   r   r   r   #   s
    


zCached.__call__)r   r   r   r   r   r   r   r   r   )r
   r   r      s   r   )Z
__future__r   r   Útyper   r   r   r   r   r   Ú<module>   s   