Author Topic: Enums in Python  (Read 768 times)

Ahmed Youssef

  • Helping Freak
  • Administrator
  • Active Member
  • *****
  • Posts: 242
    • View Profile
    • WWW
    • Email
Enums in Python
« on: November 24, 2008, 12:44:58 AM »

احيانا بنحتاج اننا نجمع مجموعة من البيانات تحت اسم معين مثلا ايام الأسبوع (احد اتنين ثلاثاء .. الخ ) والألوان (ابيض ازرق اخضر .. الخ)

مثلا فى باسكال

Code: [Select]
type
  TDay = (Saturday=1, Sunday=2, Monday=3, Tuesday=4, Wednesday=5, Thursday=6, Friday=7);

الكود المشابه ليه فى بايثون ممكن يكون

Code: [Select]
Saturday, Sunday, Monday, Tuesday, Wednesday, Thursday, Friday=range(1, 7)


ففى كذا طريقة فى بايثون
وممكن تعرفهم كالتالى

Code: [Select]
class MyDays(object): #as rawenum
    sunday, monday, tuesday=range(3)

class MyKVDays(object):
    sunday, monday, tuesday=0, 9, 2




ممكن نعمل class كالتالى

Code: [Select]
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 فقط

Code: [Select]
    Colors=RawEnum(5, 'white', 'black', 'blue')
    print Colors.white
    print Colors


او اننا نستخدم **kwargs

Code: [Select]
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)

بحيث نقدر نستخدمها كالتالى

Code: [Select]
    Days=KVEnum(sunday=0, monday=9, tuesday=2)
    print Days
    print Days.monday


وبس كدا دى طريقتى الغير المعقدة.. اذا مش مناسبة ليك تقدر تدور على طرق اخرى
*فى طريقة افضل (تقدر تكتبها فقط بمتابعتك للى اتكتب فى الفهرس!)

Logged

Life is just a chance to grow a soul. - A. Powell
Weblog: http://ahmedyoussef.wordpress.com/