
    c                         d Z  G d de          Z G d de          Z edej        d ej                                        D                       Z G d de          ZdS )	ag  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
  >>> import sys
  >>> if sys.version[0] == '2': # This test only makes sense under Python 2.x
  ...     from types import ClassType
  ...     assert not isinstance(C, (type, ClassType))

  >>> 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     8lib/python3.11/site-packages/zope/interface/tests/odd.pyr   zMetaMetaClass.__getattribute__G   s*    ; 	J$$S$///    N)__name__
__module____qualname__r    r   r   r   r   E   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__R   s,    T"""""r   c                      t          |           S r   )OddInstancer   s    r   __call__zMetaClass.__call__W   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__Z   sL     	 	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__a   s%     )-BtHHFFr   N)r   r   r   __doc__r   r   r%   r*   r   r   r   r   r   N   s_         # # #
! ! !# # #G G G G Gr   r   c                 "    i | ]\  }}|d v	||S )r   r   ).0kr$   s      r   
<dictcomp>r0   g   s7     5 5 5DAqm351a 5 5 5r   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__l   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__o   sb    &&tZ88: 	KHHT4  D= 	HtK($///r   c                     || j         |<   d S r   r-   )r   r
   r$   s      r   __setattr__zOddInstance.__setattr__x   s    dr   c                     t                      r   )NotImplementedError)r   r
   s     r   __delattr__zOddInstance.__delattr__{   s    !###r   c                 \    d| j         j        dt          t          |                     dS )Nz<odd z instance at r'   )r   r   r(   r)   r   s    r   r*   zOddInstance.__repr__~   s.     N###SD]]]]4 	4r   N)r   r   r   r   r   r7   r:   r*   r   r   r   r   r   j   s_        ) ) )0 0 0     $ $ $4 4 4 4 4r   r   N)	r+   r   r   r4   r   r   r   itemsr   r   r   r   <module>r=      s   3 3n0 0 0 0 0D 0 0 0G G G G G G G G. M+#-5 5I,>,D,D,F,F 5 5 56 6	
4 4 4 4 4& 4 4 4 4 4r   