التعدادات في بايثون

التعدادات في بايثون

تشرح هذه المقالة التعدادات في بايثون۔

YouTube Video

التعدادات في بايثون

enum في بايثون هو فئة خاصة لتعريف الثوابت، مما يزيد من القراءة ويساعد على منع أخطاء البرمجة.۔

ما هو الـ Enum؟

Enum (اختصارًا لـ enumeration) هو فئة تُستخدم لتحديد مجموعة من الثوابت المسماة.۔ يُستخدم عادةً لتجميع الثوابت ذات الصلة معًا.۔ على سبيل المثال، هو مناسب لتمثيل الألوان، أيام الأسبوع، أو الاتجاهات.۔

لماذا استخدام Enum؟

هناك عدة أسباب لاستخدام Enum۔

  • تحسين القراءة: استخدام الثوابت المسماة يجعل الكود أكثر وضوحًا.۔
  • منع الأخطاء: يمنع تغييرات أو سوء استخدام قيم الثوابت.۔
  • التجميع: ينظم الثوابت ذات الصلة في فئة واحدة، مما يمثل بيانات مرتبة.۔

الاستخدام الأساسي لـ Enum

لاستخدام enum، قم باستيراد وحدة enum وتعريف فئة.۔ يجب أن ترث الفئة من Enum وتعرّف القيم التي تريد اعتبارها كالثوابت.۔

مثال أساسي على Enum

 1from enum import Enum
 2
 3class Color(Enum):
 4    RED = 1
 5    GREEN = 2
 6    BLUE = 3
 7
 8# Usage of Enum
 9print(Color.RED)        # Color.RED
10print(Color.RED.name)   # RED
11print(Color.RED.value)  # 1

في هذا المثال، نعرّف فئة Enum تُسمى Color بثلاث قيم.۔ يمكن الوصول إلى كل اسم عبر السمة name، ويمكن الوصول إلى قيمته المرتبطة عبر السمة value

مقارنة التعدادات (Enums)

يمكن مقارنة أعضاء Enum إما بواسطة الاسم أو القيمة.۔ يمكنك استخدام عامل التشغيل is أو عامل التشغيل == للتحقق من الهوية والمساواة.۔

مثال للمقارنة

 1from enum import Enum
 2
 3class Direction(Enum):
 4    NORTH = 1
 5    SOUTH = 2
 6    EAST = 3
 7    WEST = 4
 8
 9# Equality comparison
10print(Direction.NORTH == Direction.SOUTH)  # False
11print(Direction.NORTH == Direction.NORTH)  # True
12
13# Identity comparison using is
14print(Direction.NORTH is Direction.SOUTH)  # False
15print(Direction.NORTH is Direction.NORTH)  # True

هنا، يتم توضيح المقارنات لـ Enum باستخدام == و is۔ تم تصميم Enum لمقارنة الكائنات بشكل صحيح إذا كانت لها نفس الأسماء والقيم۔

التخصيص التلقائي للقيم باستخدام auto()

إذا كنت ترغب في تخصيص القيم تلقائيًا لأعضاء Enum، يمكنك استخدام enum.auto()۔ auto() يسمح لـ Python بتخصيص القيم تلقائيًا، مما يلغي الحاجة إلى التحديد اليدوي من قبل المطورين۔

مثال على auto()

 1from enum import Enum, auto
 2
 3class Animal(Enum):
 4    DOG = auto()
 5    CAT = auto()
 6    MOUSE = auto()
 7
 8# Check the values of Enum
 9print(Animal.DOG.value)    # 1
10print(Animal.CAT.value)    # 2
11print(Animal.MOUSE.value)  # 3

في هذا المثال، استخدام auto() يلغي الحاجة إلى تحديد القيم صراحةً، مما يجعل الكود أكثر اختصارًا۔

تخصيص عدة قيم لأعضاء Enum

يمكن لأعضاء Enum أيضًا الاحتفاظ بعدة قيم، مثل المصفوفات (tuples)۔ يتيح ذلك لكل عضو الاحتفاظ بمعلومات إضافية مرتبطة۔

مثال باستخدام المصفوفات (tuples)

 1from enum import Enum
 2
 3class Status(Enum):
 4    ACTIVE = (1, 'Active user')
 5    INACTIVE = (2, 'Inactive user')
 6    SUSPENDED = (3, 'Suspended user')
 7
 8# Accessing Enum members
 9print(Status.ACTIVE.name)    # ACTIVE
10print(Status.ACTIVE.value)   # (1, 'Active user')
11print(Status.ACTIVE.value[1])  # Active user

في هذا المثال، تحتوي أعضاء فئة Status على قيمتين لكل منها، تمثل الحالة والوصف۔ هذا مفيد عندما ترغب في ربط عدة معلومات بعضو Enum۔

استخدام Enum كأعلام (flags)

تتضمن مكتبة enum في Python فئة Flag التي يمكن استخدامها كأعلام مشابهة للأعلام الثنائية (bit flags)۔ استخدام Flag يتيح لك إدارة حالات متعددة معًا۔

مثال على Flag

 1from enum import Flag, auto
 2
 3class Permission(Flag):
 4    READ = auto()
 5    WRITE = auto()
 6    EXECUTE = auto()
 7
 8# Combining flags
 9permission = Permission.READ | Permission.WRITE
10print(permission)                 # Permission.READ|WRITE
11print(Permission.EXECUTE in permission)  # False

في هذا المثال، تُستخدم العمليات الثنائية لدمج عدة أذونات۔ استخدام Flag يتيح لك إدارة حالات متعددة بطريقة مختصرة۔

نقاط يجب مراعاتها عند استخدام Enum

ثبات Enum (عدم القابلية للتغيير)

أعضاء Enum غير قابلة للتغيير۔ بمجرد تعريفها، لا يمكن تغيير أسمائها أو قيمها۔ هذه خاصية هامة للحفاظ على الاتساق كثوابت۔

1from enum import Enum
2
3class Days(Enum):
4    MONDAY = 1
5    TUESDAY = 2
6
7# Example of immutability
8# Days.MONDAY = 3  # AttributeError: Cannot reassign members.

حظر الأعضاء المكررين

يجب أن يكون لأعضاء Enum أسماء وقيم فريدة۔ حتى عند السماح بالقيم المكررة، يعطي بايثون الأولوية تلقائيًا للعضو الأول۔

الملخص

وحدة enum في بايثون هي أداة مفيدة جدًا لتجميع مجموعات من الثوابت، وتحسين سهولة قراءة الكود، والحفاظ على تناسق الكود۔ تتوفر مجموعة متنوعة من الاستخدامات، بدءًا من الاستخدام الأساسي إلى التخصيص التلقائي للقيم باستخدام auto()، وكذلك استخدامها كأعلام بت۔

فهم وإتقان enum بشكل صحيح يمكن أن يحسن جودة الكود ويساعد في منع الأخطاء۔

يمكنك متابعة المقالة أعلاه باستخدام Visual Studio Code على قناتنا على YouTube.۔ يرجى التحقق من القناة على YouTube أيضًا.۔

YouTube Video