ó
ÔËÞKc           @   s‰   d  Z  d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ e d k r… d d	 l Z d d	 l Z e j	 e d
 d „  ƒn  d	 S(   sœ  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

$Id: odd.py 110699 2010-04-09 08:16:17Z regebro $
t   MetaMetaClassc           B   s   e  Z d  „  Z RS(   c         C   s    | d k r |  St  j |  | ƒ S(   Nt	   __class__(   t   typet   __getattribute__(   t   selft   name(    (    s<   /usr/lib/python2.7/dist-packages/zope/interface/tests/odd.pyR   I   s    (   t   __name__t
   __module__R   (    (    (    s<   /usr/lib/python2.7/dist-packages/zope/interface/tests/odd.pyR    G   s   t	   MetaClassc           B   s8   e  Z d  Z e Z d „  Z d „  Z d „  Z d „  Z RS(   s   Odd classes
    c         C   s&   | |  _  | |  _ |  j j | ƒ d  S(   N(   R   t	   __bases__t   __dict__t   update(   R   R   t   basest   dict(    (    s<   /usr/lib/python2.7/dist-packages/zope/interface/tests/odd.pyt   __init__T   s    		c         C   s
   t  |  ƒ S(   N(   t   OddInstance(   R   (    (    s<   /usr/lib/python2.7/dist-packages/zope/interface/tests/odd.pyt   __call__Y   s    c         C   sF   x3 |  j  D]( } t | | |  ƒ } | |  k	 r
 | Sq
 Wt | ƒ ‚ d  S(   N(   R	   t   getattrt   AttributeError(   R   R   t   bt   v(    (    s<   /usr/lib/python2.7/dist-packages/zope/interface/tests/odd.pyt   __getattr__\   s
    c         C   s   d |  j  t t |  ƒ ƒ f S(   Ns   <odd class %s at %s>(   R   t   hext   id(   R   (    (    s<   /usr/lib/python2.7/dist-packages/zope/interface/tests/odd.pyt   __repr__c   s    (	   R   R   t   __doc__R    t   __metaclass__R   R   R   R   (    (    (    s<   /usr/lib/python2.7/dist-packages/zope/interface/tests/odd.pyR   O   s   			R   c           B   s5   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         C   s   | |  j  d <d  S(   NR   (   R
   (   R   t   cls(    (    s<   /usr/lib/python2.7/dist-packages/zope/interface/tests/odd.pyR   h   s    c         C   sU   t  j |  d ƒ } | d k r" | S| j | |  ƒ } | |  k	 rD | St | d | ƒ S(   NR
   R   (   t   objectR   t   getR   (   R   R   R   R   (    (    s<   /usr/lib/python2.7/dist-packages/zope/interface/tests/odd.pyR   k   s    c         C   s   | |  j  | <d  S(   N(   R
   (   R   R   R   (    (    s<   /usr/lib/python2.7/dist-packages/zope/interface/tests/odd.pyt   __setattr__t   s    c         C   s   |  j  | =d  S(   N(   R
   (   R   R   (    (    s<   /usr/lib/python2.7/dist-packages/zope/interface/tests/odd.pyt   __delattr__w   s    c         C   s    d |  j  j t t |  ƒ ƒ f S(   Ns   <odd %s instance at %s>(   R   R   R   R   (   R   (    (    s<   /usr/lib/python2.7/dist-packages/zope/interface/tests/odd.pyR   z   s    (   R   R   R   R   R   R   R   (    (    (    s<   /usr/lib/python2.7/dist-packages/zope/interface/tests/odd.pyR   f   s
   					t   __main__iÿÿÿÿNt	   isprivatec          G   s   t  S(   N(   t   False(   t   a(    (    s<   /usr/lib/python2.7/dist-packages/zope/interface/tests/odd.pyt   <lambda>ƒ   s    (
   R   R   R    R   R   R   R   t   doctestR    t   testmod(    (    (    s<   /usr/lib/python2.7/dist-packages/zope/interface/tests/odd.pyt   <module>C   s   