U
    ©€lj—  ã                   @   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   ú</tmp/pip-unpacked-wheel-8v5_7jmu/zope/interface/tests/odd.pyr   D   s    zMetaMetaClass.__getattribute__N)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r	   r   B   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__O   s    zMetaClass.__init__c                 C   s   t | ƒS r   )ÚOddInstance©r   r   r   r	   Ú__call__T   s    zMetaClass.__call__c                 C   s4   | j D ] }t||| ƒ}|| k	r|  S qt|ƒ‚d S r   )r   ÚgetattrÚAttributeError)r   r   ÚbÚvr   r   r	   Ú__getattr__W   s
    

zMetaClass.__getattr__c                 C   s   d| j › dtt| ƒƒ› d�S )Nz<odd class z at ú>)r
   ÚhexÚidr   r   r   r	   Ú__repr__^   s    zMetaClass.__repr__N)r
   r   r   Ú__doc__r   r   r   r!   r   r   r   r	   r   K   s
   r   c                 C   s   i | ]\}}|d kr||“qS )©r   r   )Ú.0Úkr   r   r   r	   Ú
<dictcomp>e   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   n   s    zOddInstance.__init__c                 C   s>   t  | d¡}|dkr|S | || ¡}|| k	r0|S t|d |ƒS )Nr   r   )Úobjectr   Úgetr   )r   r   r   r   r   r   r	   r   q   s    zOddInstance.__getattribute__c                 C   s   || j |< d S r   r#   )r   r   r   r   r   r	   Ú__setattr__z   s    zOddInstance.__setattr__c                 C   s
   t ƒ ‚d S r   )ÚNotImplementedError)r   r   r   r   r	   Ú__delattr__}   s    zOddInstance.__delattr__c                 C   s   d  | jjtt| ƒƒ¡S )Nz<odd {} instance at {}>)Úformatr   r
   r   r    r   r   r   r	   r!   €   s     
ÿzOddInstance.__repr__N)r
   r   r   r   r   r)   r+   r!   r   r   r   r	   r   l   s
   	r   N)r"   r   r   r   r   r   Úitemsr   r   r   r   r	   Ú<module>   s   4	ÿý
