احيانا بنحتاج اننا نجمع مجموعة من البيانات تحت اسم معين مثلا ايام الأسبوع (احد اتنين ثلاثاء .. الخ ) والألوان (ابيض ازرق اخضر .. الخ)
مثلا فى باسكال
type
TDay = (Saturday=1, Sunday=2, Monday=3, Tuesday=4, Wednesday=5, Thursday=6, Friday=7);
الكود المشابه ليه فى بايثون ممكن يكون
Saturday, Sunday, Monday, Tuesday, Wednesday, Thursday, Friday=range(1, 7)
ففى كذا طريقة فى بايثون
وممكن تعرفهم كالتالى
class MyDays(object): #as rawenum
sunday, monday, tuesday=range(3)
class MyKVDays(object):
sunday, monday, tuesday=0, 9, 2
ممكن نعمل class كالتالى
class RawEnum(object):
def __init__(self, start, *enum): #do we need to set a start, end, step? very fancy...
self._kw=dict(zip(enum, range(start, start+len(enum))))
counter=start
for arg in enum: #assuming it doesn't exist.
self.__setattr__(arg, start)
counter += 1
__str__=lambda self: str(self._kw) #Can be solved with an ordered dict.
وهنا بيتحدد فيه قيمة البداية للenum فقط
Colors=RawEnum(5, 'white', 'black', 'blue')
print Colors.white
print Colors
او اننا نستخدم **kwargs
class KVEnum(object):
def __init__(self, **kwargs):
self.__kw=kwargs
for k, v in kwargs.items():
self.__setattr__(k, v)
__str__=lambda self: str(self.__kw)
بحيث نقدر نستخدمها كالتالى
Days=KVEnum(sunday=0, monday=9, tuesday=2)
print Days
print Days.monday
وبس كدا دى طريقتى الغير المعقدة.. اذا مش مناسبة ليك تقدر تدور على طرق اخرى
*فى طريقة افضل (تقدر تكتبها فقط بمتابعتك للى اتكتب فى الفهرس!)