التعدادات في بايثون
تشرح هذه المقالة التعدادات في بايثون۔
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 أيضًا.۔