
    Of                         d Z  G d de          Z G d d          Z edej        d ej                                        D                       Z G 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                       e Zd Zd ZdS )MetaMetaClassc                 H    |dk    r| S t                               | |          S N	__class__)type__getattribute__)clsnames     J/var/www/html/env/lib/python3.11/site-packages/zope/interface/tests/odd.pyr   zMetaMetaClass.__getattribute__D   s(    ;J$$S$///    N)__name__
__module____qualname__r    r   r   r   r   B   s#        0 0 0 0 0r   r   c                   *    e Zd ZdZd Zd Zd Zd ZdS )	MetaClasszOdd classes
    c                 V    || _         || _        | j                            |           d S N)r   	__bases____dict__update)selfr
   basesdicts       r   __init__zMetaClass.__init__O   s,    T"""""r   c                      t          |           S r   )OddInstancer   s    r   __call__zMetaClass.__call__T   s    4   r   c                 f    | j         D ]}t          |||           }|| ur|c S t          |          r   )r   getattrAttributeError)r   r
   bvs       r   __getattr__zMetaClass.__getattr__W   sI     	 	A4&&A}} T"""r   c                 R    d| j          dt          t          |                      dS )Nz<odd class z at >)r   hexidr   s    r   __repr__zMetaClass.__repr__^   s)    @T]@@BtHH@@@@r   N)r   r   r   __doc__r   r   r%   r*   r   r   r   r   r   K   s_         # # #
! ! !# # #A A A A Ar   r   c                 "    i | ]\  }}|d v	||S )r   r   ).0kr$   s      r   
<dictcomp>r0   e   s3       AM!! 	
1!!!r   c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )r   c                     || j         d<   d S r   r-   )r   r	   s     r   r   zOddInstance.__init__n   s    %(k"""r   c                     t                               | d          }|dk    r|S |                    ||           }|| ur|S t          |d         |          S )Nr   r   )objectr   getr!   )r   r
   r   r$   s       r   r   zOddInstance.__getattribute__q   s]    &&tZ88:KHHT4  D==HtK($///r   c                     || j         |<   d S r   r-   )r   r
   r$   s      r   __setattr__zOddInstance.__setattr__z   s    dr   c                     t                      r   )NotImplementedError)r   r
   s     r   __delattr__zOddInstance.__delattr__}   s    !###r   c                 v    d                     | j        j        t          t	          |                               S )Nz<odd {} instance at {}>)formatr   r   r(   r)   r   s    r   r*   zOddInstance.__repr__   s0    (//N#SD]]4 4 	4r   N)r   r   r   r   r   r7   r:   r*   r   r   r   r   r   l   s_        ) ) )0 0 0     $ $ $4 4 4 4 4r   r   N)r+   r   r   r   r   r   itemsr   r   r   r   <module>r>      s   / /h0 0 0 0 0D 0 0 0A A A A A A A A. M "+1133   	4 4 4 4 4 4 4 4 4 4r   