
    e              
           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     :/usr/lib/python3/dist-packages/zope/interface/tests/odd.pyr   zMetaMetaClass.__getattribute__C   s"    ;J$$S$//    N)__name__
__module____qualname__r    r   r   r   r   A   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__N   s"    T"r   c                     t        |       S r   )OddInstancer   s    r   __call__zMetaClass.__call__S   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__V   s<     	A4&A}	 T""r   c                 ^    dj                  | j                  t        t        |                   S )Nz<odd class {} at {}>)formatr   hexidr   s    r   __repr__zMetaClass.__repr__]   s!    %,,T]]C4MJJr   N)r   r   r   __doc__r   r   r%   r*   r   r   r   r   r   J   s    #
!#K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__h   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__k   sO    &&tZ8:KHHT4 D=HtK($//r   c                 "    || j                   |<   y r   r,   )r   r
   r$   s      r   __setattr__zOddInstance.__setattr__t   s    dr   c                     t               r   )NotImplementedError)r   r
   s     r   __delattr__zOddInstance.__delattr__w   s    !##r   c                 r    dj                  | j                  j                  t        t	        |                   S )Nz<odd {} instance at {}>)r'   r   r   r(   r)   r   s    r   r*   zOddInstance.__repr__z   s,    (//NN##SD]4 	4r   N)r   r   r   r   r   r3   r6   r*   r   r   r   r   r   f   s    )0 $4r   r   N)r+   r   r   r   r   r   itemsr   )kr$   s   00r   <module>r:      s}   /f0D 0K K. +#--,5,>,>,D,D,F 5DAqm3 a4 56	
4 45s   A'