ó V Qc@s¡dZdefd„ƒYZdefd„ƒYZdefd„ƒYZddd„ƒYZd dd „ƒYZd „Zd „Z e d kreƒe ƒndS(sEnumeration metaclass.t EnumMetaclasscBs)eZdZd„Zd„Zd„ZRS(sgMetaclass for enumeration. To define your own enumeration, do something like class Color(Enum): red = 1 green = 2 blue = 3 Now, Color.red, Color.green and Color.blue behave totally different: they are enumerated values, not integers. Enumerations cannot be instantiated; however they can be subclassed. cCs—tt|ƒj|||ƒg|_xk|jƒD]]}|jdƒoS|jdƒs2t||||ƒ}t|||ƒ|jj |ƒq2q2WdS(Nt__( tsuperRt__init__t_memberstkeyst startswithtendswitht EnumInstancetsetattrtappend(tclstnametbasestdicttattrtenumval((s0/usr/lib64/python2.7/Demo/newmetaclasses/Enum.pyRs cCs |dkr|jSt|‚dS(Nt __members__(RtAttributeError(R R ((s0/usr/lib64/python2.7/Demo/newmetaclasses/Enum.pyt __getattr__s cCs¿d}}g|jD]*}t|tƒr|tk r|j^q}|r`ddj|ƒ}ng|jD]}d|t||ƒf^qj}|r«ddj|ƒ}nd|j||fS(Nts(%s)s, s%s: %ds: {%s}s%s%s%s(t __bases__t isinstanceRtEnumt__name__tjoinRtgetattr(R ts1ts2tbaset enumbasestvalt enumvalues((s0/usr/lib64/python2.7/Demo/newmetaclasses/Enum.pyt__repr__"s *,(Rt __module__t__doc__RRR!(((s0/usr/lib64/python2.7/Demo/newmetaclasses/Enum.pyRs tFullEnumMetaclasscBseZdZd„ZRS(snMetaclass for full enumerations. A full enumeration displays all the values defined in base classes. cCs|tt|ƒj|||ƒxY|jD]N}t|tƒr&x6|jD](}||jkrE|jj|ƒqEqEWq&q&WdS(N(RR$Rt__mro__RRRR (R R R RtobjR((s0/usr/lib64/python2.7/Demo/newmetaclasses/Enum.pyR4s (RR"R#R(((s0/usr/lib64/python2.7/Demo/newmetaclasses/Enum.pyR$.sRcBs2eZdZd„Zd„Zd„Zd„ZRS(s Class to represent an enumeration value. EnumInstance('Color', 'red', 12) prints as 'Color.red' and behaves like the integer 12 when compared, but doesn't support arithmetic. XXX Should it record the actual enumeration rather than just its name? cCstj||ƒS(N(tintt__new__(R t classnametenumnametvalue((s0/usr/lib64/python2.7/Demo/newmetaclasses/Enum.pyR(GscCs||_||_dS(N(t_EnumInstance__classnamet_EnumInstance__enumname(tselfR)R*R+((s0/usr/lib64/python2.7/Demo/newmetaclasses/Enum.pyRJs cCsd|j|j|fS(NsEnumInstance(%s, %s, %d)(R,R-(R.((s0/usr/lib64/python2.7/Demo/newmetaclasses/Enum.pyR!NscCsd|j|jfS(Ns%s.%s(R,R-(R.((s0/usr/lib64/python2.7/Demo/newmetaclasses/Enum.pyt__str__Rs(RR"R#R(RR!R/(((s0/usr/lib64/python2.7/Demo/newmetaclasses/Enum.pyR=s    RcBseZeZRS((RR"Rt __metaclass__(((s0/usr/lib64/python2.7/Demo/newmetaclasses/Enum.pyRUstFullEnumcBseZeZRS((RR"R$R0(((s0/usr/lib64/python2.7/Demo/newmetaclasses/Enum.pyR1XscCsødtfd„ƒY}|jGHt|jƒGH|j|jkGH|j|jkGH|jdkGH|jdkGHd|fd„ƒY}|jGH|jGH|j|jkGHdtfd„ƒY}d ||fd „ƒY}|jGH|jGH|GH|GH|GH|GHdS( NtColorcBseZdZdZdZRS(iii(RR"tredtgreentblue(((s0/usr/lib64/python2.7/Demo/newmetaclasses/Enum.pyR2]siit ExtendedColorcBs&eZdZdZdZdZdZRS(iiiii(RR"twhitetorangetyellowtpurpletblack(((s0/usr/lib64/python2.7/Demo/newmetaclasses/Enum.pyR6js t OtherColorcBseZdZdZRS(ii(RR"R7R5(((s0/usr/lib64/python2.7/Demo/newmetaclasses/Enum.pyR<vst MergedColorcBseZRS((RR"(((s0/usr/lib64/python2.7/Demo/newmetaclasses/Enum.pyR=zs(RR3treprR5R8R7(R2R6R<R=((s0/usr/lib64/python2.7/Demo/newmetaclasses/Enum.pyt_test[s&cCsødtfd„ƒY}|jGHt|jƒGH|j|jkGH|j|jkGH|jdkGH|jdkGHd|fd„ƒY}|jGH|jGH|j|jkGHdtfd„ƒY}d ||fd „ƒY}|jGH|jGH|GH|GH|GH|GHdS( NR2cBseZdZdZdZRS(iii(RR"R3R4R5(((s0/usr/lib64/python2.7/Demo/newmetaclasses/Enum.pyR2‡siiR6cBs&eZdZdZdZdZdZRS(iiiii(RR"R7R8R9R:R;(((s0/usr/lib64/python2.7/Demo/newmetaclasses/Enum.pyR6”s R<cBseZdZdZRS(ii(RR"R7R5(((s0/usr/lib64/python2.7/Demo/newmetaclasses/Enum.pyR< sR=cBseZRS((RR"(((s0/usr/lib64/python2.7/Demo/newmetaclasses/Enum.pyR=€s(R1R3R>R5R8R7(R2R6R<R=((s0/usr/lib64/python2.7/Demo/newmetaclasses/Enum.pyt_test2…s&t__main__N((( R#ttypeRR$R'RRR1R?R@R(((s0/usr/lib64/python2.7/Demo/newmetaclasses/Enum.pyts+ * *