o $ x`Š ã@sVdZGdd„deƒZGdd„deƒZedejdd„ej ¡DƒƒZGdd„deƒZd S) agOdd 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@seZdZdd„ZdS)Ú MetaMetaClasscCs|dkr|St ||¡S©NÚ __class__)ÚtypeÚ__getattribute__)ÚclsÚname©rú:/usr/lib/python3/dist-packages/zope/interface/tests/odd.pyrGs zMetaMetaClass.__getattribute__N)Ú__name__Ú __module__Ú __qualname__rrrrr rEs rc@s0eZdZdZdd„Zdd„Zdd„Zdd „Zd S) Ú MetaClasszOdd classes cCs||_||_|j |¡dS©N)r Ú __bases__Ú__dict__Úupdate)ÚselfrÚbasesÚdictrrr Ú__init__RszMetaClass.__init__cCst|ƒSr)Ú OddInstance©rrrr Ú__call__WszMetaClass.__call__cCs0|jD]}t|||ƒ}||ur|Sqt|ƒ‚r)rÚgetattrÚAttributeError)rrÚbÚvrrr Ú __getattr__Zs  ÿzMetaClass.__getattr__cCsd|jtt|ƒƒfS)Nz)r ÚhexÚidrrrr Ú__repr__aszMetaClass.__repr__N)r r r Ú__doc__rrrr rrrr r Ns  r cCsi|] \}}|dvr||“qS)©rr)Ú.0Úkrrrr Ú gs ÿr%c@s4eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd S) rcCs||jd<dSrr")rrrrr rlózOddInstance.__init__cCs>t |d¡}|dkr |S| ||¡}||ur|St|d|ƒS)Nrr)ÚobjectrÚgetr)rrrrrrr ros  zOddInstance.__getattribute__cCs||j|<dSrr")rrrrrr Ú __setattr__xr&zOddInstance.__setattr__cCstƒ‚r)ÚNotImplementedError)rrrrr Ú __delattr__{szOddInstance.__delattr__cCsd|jjtt|ƒƒfS)Nz)rr rrrrrr r ~sÿzOddInstance.__repr__N)r r r rrr)r+r rrrr rjs   rN) r!rrr'r rrÚitemsrrrrr Ús 7 þ