Spade
Mini Shell
�
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
startswithtendswithtEnumInstancetsetattrtappend(tclstnametbasestdicttattrtenumval((s0/usr/lib64/python2.7/Demo/newmetaclasses/Enum.pyRs cCs
|dkr|jSt|�dS(Nt__members__(RtAttributeError(RR((s0/usr/lib64/python2.7/Demo/newmetaclasses/Enum.pyt__getattr__scCs�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(Rts1ts2tbaset 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
(RRR
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(sClass
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__(Rt 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<vstMergedColorcBseZRS((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.pyt<module>s+ * *