
    Vh              
           d Z  G d de      Z G d d      Z edej                  ej
                  j                         D  ci c]  \  } }| dvr| | c}}       Z G d d      Zyc c}} w )	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y)MetaMetaClassc                 <    |dk(  r| S t         j                  | |      S N	__class__)type__getattribute__)clsnames     H/home/dcms/DCMS/lib/python3.12/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    0r   r   c                   (    e Zd ZdZd Zd Zd Zd Zy)	MetaClasszOdd classes
    c                 V    || _         || _        | j                  j                  |       y 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                 d    | j                   D ]  }t        |||       }|| us|c S  t        |      r   )r   getattrAttributeError)r   r
   bvs       r   __getattr__zMetaClass.__getattr__W   s<     	A4&A}	 T""r   c                 L    d| j                    dt        t        |              dS )Nz<odd class z at >)r   hexidr   s    r   __repr__zMetaClass.__repr__^   s#    T]]O4BtHa@@r   N)r   r   r   __doc__r   r   r%   r*   r   r   r   r   r   K   s    #
!#Ar   r   r   c                   *    e Zd Zd Zd Zd Zd Zd Zy)r   c                 "    || j                   d<   y r   r,   )r   r	   s     r   r   zOddInstance.__init__n   s    %(k"r   c                     t         j                  | d      }|dk(  r|S |j                  ||       }|| ur|S t        |d   |      S )Nr   r   )objectr   getr!   )r   r
   r   r$   s       r   r   zOddInstance.__getattribute__q   sO    &&tZ8:KHHT4 D=HtK($//r   c                 "    || j                   |<   y 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                 r    dj                  | j                  j                  t        t	        |                   S )Nz<odd {} instance at {}>)formatr   r   r(   r)   r   s    r   r*   zOddInstance.__repr__   s,    (//NN##SD]4 	4r   N)r   r   r   r   r   r3   r6   r*   r   r   r   r   r   l   s    )0 $4r   r   N)r+   r   r   r   r   r   itemsr   )kr$   s   00r   <module>r;      s   /h0D 0A A. "++113AM! 	
1	4 4s   A'