o
    gHdÇ  ã                   @   sR   d Z G dd„ deƒZG dd„ dƒZedejdd„ ej ¡ D ƒƒZG dd„ dƒZd	S )
a¬  Odd meta class that doesn't subclass type.

This is used for testing support for ExtensionClass in new interfaces.

  >>> class A(object):
  ...     __metaclass__ = MetaClass
  ...     a = 1
  ...
  >>> A.__name__
  'A'
  >>> A.__bases__ == (object,)
  True
  >>> class B(object):
  ...     __metaclass__ = MetaClass
  ...     b = 1
  ...
  >>> class C(A, B): pass
  ...
  >>> C.__name__
  'C'
  >>> int(C.__bases__ == (A, B))
  1
  >>> a = A()
  >>> aa = A()
  >>> a.a
  1
  >>> aa.a
  1
  >>> aa.a = 2
  >>> a.a
  1
  >>> aa.a
  2
  >>> c = C()
  >>> c.a
  1
  >>> c.b
  1
  >>> c.b = 2
  >>> c.b
  2
  >>> C.c = 1
  >>> c.c
  1

  >>> int(C.__class__.__class__ is C.__class__)
  1
c                   @   s   e Zd Zdd„ ZdS )ÚMetaMetaClassc                 C   s   |dkr| S t  | |¡S ©NÚ	__class__)ÚtypeÚ__getattribute__)ÚclsÚname© r   ú_/var/www/html/facialservice/flask-venv/lib/python3.10/site-packages/zope/interface/tests/odd.pyr   C   s   zMetaMetaClass.__getattribute__N)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r	   r   A   s    r   c                   @   s0   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
S )Ú	MetaClasszOdd classes
    c                 C   s   || _ || _| j |¡ d S ©N)r
   Ú	__bases__Ú__dict__Úupdate)Úselfr   ÚbasesÚdictr   r   r	   Ú__init__N   s   zMetaClass.__init__c                 C   s   t | ƒS r   )ÚOddInstance©r   r   r   r	   Ú__call__S   s   zMetaClass.__call__c                 C   s0   | j D ]}t||| ƒ}|| ur|  S qt|ƒ‚r   )r   ÚgetattrÚAttributeError)r   r   ÚbÚvr   r   r	   Ú__getattr__V   s   
ÿzMetaClass.__getattr__c                 C   s   d  | jtt| ƒƒ¡S )Nz<odd class {} at {}>)Úformatr
   ÚhexÚidr   r   r   r	   Ú__repr__]   s   zMetaClass.__repr__N)r
   r   r   Ú__doc__r   r   r   r!   r   r   r   r	   r   J   s    r   c                 C   s   i | ]\}}|d vr||“qS )©r   r   )Ú.0Úkr   r   r   r	   Ú
<dictcomp>c   s    ÿr&   c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )r   c                 C   s   || j d< d S r   r#   )r   r   r   r   r	   r   h   ó   zOddInstance.__init__c                 C   s>   t  | d¡}|dkr|S | || ¡}|| ur|S t|d |ƒS )Nr   r   )Úobjectr   Úgetr   )r   r   r   r   r   r   r	   r   k   s   zOddInstance.__getattribute__c                 C   s   || j |< d S r   r#   )r   r   r   r   r   r	   Ú__setattr__t   r'   zOddInstance.__setattr__c                 C   s   t ƒ ‚r   )ÚNotImplementedError)r   r   r   r   r	   Ú__delattr__w   s   zOddInstance.__delattr__c                 C   s   d  | jjtt| ƒƒ¡S )Nz<odd {} instance at {}>)r   r   r
   r   r    r   r   r   r	   r!   z   s   ÿzOddInstance.__repr__N)r
   r   r   r   r   r*   r,   r!   r   r   r   r	   r   f   s    	r   N)r"   r   r   r   r   r   Úitemsr   r   r   r   r	   Ú<module>   s   3	þ