
    =`=                     B    d Z  G d de          Z G d de          ZdS )z#
meta.py

Some useful metaclasses.
c                       e Zd ZdZd ZdS )LeafClassesMetaa  
    A metaclass for classes that keeps track of all of them that
    aren't base classes.

    >>> Parent = LeafClassesMeta('MyParentClass', (), {})
    >>> Parent in Parent._leaf_classes
    True
    >>> Child = LeafClassesMeta('MyChildClass', (Parent,), {})
    >>> Child in Parent._leaf_classes
    True
    >>> Parent in Parent._leaf_classes
    False

    >>> Other = LeafClassesMeta('OtherClass', (), {})
    >>> Parent in Other._leaf_classes
    False
    >>> len(Other._leaf_classes)
    1
    c                     t          | d          st                      | _        t          | d          }|                    |            |t          |          z  }d S )N_leaf_classes)hasattrsetr   getattradd)clsnamebasesattrsleaf_classess        3lib/python3.11/site-packages/jaraco/classes/meta.py__init__zLeafClassesMeta.__init__   sW    sO,, 	& #CsO44E

"    N)__name__
__module____qualname____doc__r    r   r   r   r      s-         (# # # # #r   r   c                   &     e Zd ZdZdZ fdZ xZS )TagRegisteredaY  
    As classes of this metaclass are created, they keep a registry in the
    base class of all classes by a class attribute, indicated by attr_name.

    >>> FooObject = TagRegistered('FooObject', (), dict(tag='foo'))
    >>> FooObject._registry['foo'] is FooObject
    True
    >>> BarObject = TagRegistered('Barobject', (FooObject,), dict(tag='bar'))
    >>> FooObject._registry is BarObject._registry
    True
    >>> len(FooObject._registry)
    2

    '...' below should be 'jaraco.classes' but for pytest-dev/pytest#3396
    >>> FooObject._registry['bar']
    <class '....meta.Barobject'>
    tagc                     t          t          |                               |||           t          | d          si | _        | j        }t          | |j        d           }|r| | j        |<   d S d S )N	_registry)superr   r   r   r   	__class__r   	attr_name)r
   r   r   	namespacemetaattrr   s         r   r   zTagRegistered.__init__;   s|    mS!!**4	BBBsK(( 	CM}sDND11 	&"%CM$	& 	&r   )r   r   r   r   r   r   __classcell__)r   s   @r   r   r   &   sI         $ I& & & & & & & & &r   r   N)r   typer   r   r   r   r   <module>r$      sm    # # # # #d # # #<& & & & &D & & & & &r   