�
JDvc� � �� � d Z G d� de� � Z G d� de� � Z edej d� ej � � � D � � � � Z G d� de� � ZdS ) 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 Zd Zd� ZdS )�
MetaMetaClassc �H � |dk r| S t � | |� � S �N� __class__)�type�__getattribute__)�cls�names �:/usr/lib/python3/dist-packages/zope/interface/tests/odd.pyr zMetaMetaClass.__getattribute__G s( � ��;����J��$�$�S�$�/�/�/� N)�__name__�
__module__�__qualname__r � r r r r E s# � � � � � �0� 0� 0� 0� 0r r c �* � e Zd ZdZd� Zd� Zd� Zd� ZdS )� MetaClasszOdd classes
c �V � || _ || _ | j � |� � d S �N)r
� __bases__�__dict__�update)�selfr
�bases�dicts r �__init__zMetaClass.__init__R s, � ���
�����
���T�"�"�"�"�"r c � � t | � � S r )�OddInstance�r s r �__call__zMetaClass.__call__W s � ��4� � � r c �f � | j D ]}t ||| � � }|| ur|c S �t |� � �r )r �getattr�AttributeError)r r
�b�vs r �__getattr__zMetaClass.__getattr__Z sI � ��� � �A���4��&�&�A���}�}����� ��T�"�"�"r c �R � d| j �dt t | � � � � �d�S )Nz<odd class z at �>)r
�hex�idr s r �__repr__zMetaClass.__repr__a s% � � �)-�����B�t�H�H�
�
�
�
�F�Fr N)r
r r �__doc__r r r% r* r r r r r N s_ � � � � � �� �#� #� #�
!� !� !�#� #� #�G� G� G� G� Gr r c �" |