B
    æ¹`Š  ã               @   sV   d Z G dd„ deƒZG dd„ deƒZedejdd„ ej ¡ D ƒƒZG d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               @   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   ú`/home/kop/projects/devel/pgwui/test_venv/lib/python3.7/site-packages/zope/interface/tests/odd.pyr   G   s    zMetaMetaClass.__getattribute__N)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   E   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__R   s    zMetaClass.__init__c             C   s   t | ƒS )N)ÚOddInstance)r   r   r   r   Ú__call__W   s    zMetaClass.__call__c             C   s4   x&| j D ]}t||| ƒ}|| k	r|S qW t|ƒ‚d S )N)r   ÚgetattrÚAttributeError)r   r   ÚbÚvr   r   r   Ú__getattr__Z   s
    zMetaClass.__getattr__c             C   s   d| j tt| ƒƒf S )Nz<odd class %s at %s>)r	   ÚhexÚid)r   r   r   r   Ú__repr__a   s    zMetaClass.__repr__N)r	   r
   r   Ú__doc__r   r   r   r   r   r   r   r   r   N   s
   r   c             C   s   i | ]\}}|d kr||“qS ))r   r   )Ú.0Úkr   r   r   r   ú
<dictcomp>g   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 )Nr   )r   )r   r   r   r   r   r   l   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   o   s    zOddInstance.__getattribute__c             C   s   || j |< d S )N)r   )r   r   r   r   r   r   Ú__setattr__x   s    zOddInstance.__setattr__c             C   s
   t ƒ ‚d S )N)ÚNotImplementedError)r   r   r   r   r   Ú__delattr__{   s    zOddInstance.__delattr__c             C   s   d| j jtt| ƒƒf S )Nz<odd %s instance at %s>)r   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   j   s
   	r   N)	r   r   r   r"   r   r   r   Úitemsr   r   r   r   r   Ú<module>A   s   	