e dZGddeZGddZedejej j Dcic] \}}|dvr||c}}ZGddZycc}}w) aOdd 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 ceZdZdZy) MetaMetaClassc<|dk(r|Stj||SN __class__)type__getattribute__)clsnames :/usr/lib/python3/dist-packages/zope/interface/tests/odd.pyrzMetaMetaClass.__getattribute__Cs" ; J$$S$//N)__name__ __module__ __qualname__rr r rrAs0r rc(eZdZdZdZdZdZdZy) MetaClasszOdd classes cV||_||_|jj|yN)r __bases____dict__update)selfr basesdicts r __init__zMetaClass.__init__Ns"  T"r ct|Sr) OddInstancers r __call__zMetaClass.__call__Ss 4  r cd|jD]}t|||}||us|cSt|r)rgetattrAttributeError)rr bvs r __getattr__zMetaClass.__getattr__Vs< A4&A} T""r c^dj|jtt|S)Nz)formatr hexidrs r __repr__zMetaClass.__repr__]s!%,,T]]C4MJJr N)r rr__doc__rrr%r*rr r rrJs# !#Kr rrc*eZdZdZdZdZdZdZy)rc"||jd<yrr,)rr s r rzOddInstance.__init__hs%( k"r ctj|d}|dk(r|S|j||}||ur|St|d|S)Nrr)objectrgetr!)rr rr$s r rzOddInstance.__getattribute__ksO&&tZ8 : K HHT4  D=HtK($//r c"||j|<yrr,)rr r$s r __setattr__zOddInstance.__setattr__ts dr ctr)NotImplementedError)rr s r __delattr__zOddInstance.__delattr__ws !##r crdj|jjtt |S)Nz)r'rr r(r)rs r r*zOddInstance.__repr__zs,(// NN # #SD]4 4r N)r rrrrr3r6r*rr r rrfs)0 $4r rN)r+rrrrritemsr)kr$s00r r:s}/f0D0KK. +#--,5,>,>,D,D,F5DAqm3a45 6 445sA'