IntEnum وFlag
استخدم التعدادات الصحيحة وتعدادات العلامات
IntEnum وFlag درس مجاني في Python Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Python Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Python Academy 4 دروس في المجموع.
ما يتجاوز التعداد العادي
توفر وحدة enum فئات أساسية متخصصة. تتصرف أعضاء IntEnum مثل الأعداد الصحيحة، ويمكن دمج أعضاء Flag باستخدام العوامل على مستوى البتات. وهي تغطي الحالات التي يكون فيها Enum العادي مقيّدًا أكثر من اللازم.
التعداد العادي ليس عددًا صحيحًا
لا يمكن استخدام عضو Enum العادي بالتبادل مع قيمته الصحيحة. وتؤدي مقارنته بعدد إلى إرجاع False.
from enum import Enum
class Level(Enum):
LOW = 1
HIGH = 2
print(Level.LOW == 1)يقارن IntEnum كعدد صحيح
عضو IntEnum هو عدد صحيح، لذا يقارن على أنه يساوي قيمته العددية ويدعم الترتيب.
from enum import IntEnum
class Level(IntEnum):
LOW = 1
HIGH = 2
print(Level.LOW == 1)
print(Level.LOW < Level.HIGH)استخدام IntEnum في العمليات الحسابية
بما أن الأعضاء أعداد صحيحة فعلية، يمكنكم استخدامها في العمليات الحسابية والفهرسة. استخدموا ذلك عندما تحتاج القيمة فعلًا إلى التوافق مع التعليمات البرمجية العددية.
from enum import IntEnum
class Priority(IntEnum):
LOW = 1
MEDIUM = 5
HIGH = 10
print(Priority.HIGH + 1)
print(Priority.MEDIUM * 2)فرز أعضاء IntEnum
بما أن IntEnum يدعم الترتيب، تُفرز قائمة الأعضاء حسب القيمة من دون دالة مفتاح إضافية.
from enum import IntEnum
class Priority(IntEnum):
LOW = 1
MEDIUM = 5
HIGH = 10
for p in sorted([Priority.HIGH, Priority.LOW, Priority.MEDIUM]):
print(p.name)استخدام Flag للخيارات القابلة للدمج
صُمّم تعداد Flag للقيم التي تدمجونها. أسندوا قوى العدد اثنين بحيث يشغل كل عضو بتًا خاصًا به.
from enum import Flag, auto
class Permission(Flag):
READ = auto()
WRITE = auto()
EXECUTE = auto()
print(Permission.READ)
print(Permission.READ.value)دمج العلامات باستخدام |
استخدموا عامل OR على مستوى البتات | لدمج العلامات في قيمة مركبة واحدة.
from enum import Flag, auto
class Permission(Flag):
READ = auto()
WRITE = auto()
EXECUTE = auto()
access = Permission.READ | Permission.WRITE
print(access)اختبار العضوية باستخدام in
تحققوا مما إذا كانت علامة ما مضبوطة باستخدام عامل in، الذي ينفذ اختبار البتات نيابةً عنكم.
from enum import Flag, auto
class Permission(Flag):
READ = auto()
WRITE = auto()
EXECUTE = auto()
access = Permission.READ | Permission.WRITE
print(Permission.READ in access)
print(Permission.EXECUTE in access)التقاطع والإزالة
ادمجوا العلامات باستخدام & (AND) للعثور على البتات المشتركة، وأزيلوا علامة باستخدام & مع المتمّم ~.
from enum import Flag, auto
class Permission(Flag):
READ = auto()
WRITE = auto()
EXECUTE = auto()
access = Permission.READ | Permission.WRITE
still = access & ~Permission.WRITE
print(still)استخدام IntFlag للعلامات الصحيحة
يجمع IntFlag بين الفكرتين: علامات قابلة للدمج تتصرف أيضًا مثل الأعداد الصحيحة العادية، وهو مفيد عند التعامل مع واجهات C البرمجية أو أقنعة البتات المخزّنة كأعداد.
from enum import IntFlag, auto
class Mode(IntFlag):
R = 4
W = 2
X = 1
m = Mode.R | Mode.W
print(int(m))التكرار على علامة مركبة
يؤدي التكرار على قيمة Flag مركبة إلى الحصول على كل علامة فردية تحتويها، وهو أمر مفيد لسرد الخيارات النشطة.
from enum import Flag, auto
class Permission(Flag):
READ = auto()
WRITE = auto()
EXECUTE = auto()
access = Permission.READ | Permission.EXECUTE
for p in access:
print(p.name)اختبار سريع
لماذا قد تختارون تعداد Flag بدلًا من تعداد Enum عادي؟
مراجعة
تعلّمتم استخدام التعدادات الصحيحة وتعدادات العلامات.
- تتصرف أعضاء
IntEnumمثل الأعداد الصحيحة وتدعم الترتيب والعمليات الحسابية. - تُدمج أعضاء
Flagباستخدام|و&و~، ويُتحقق منها باستخدامin. - يجمع
IntFlagبين السلوكين. - استخدموا قوى العدد اثنين لقيم العلامات.
الأسئلة الشائعة
هل درس «IntEnum وFlag» مجاني؟
نعم — نص درس «IntEnum وFlag» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Python Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Python Academy 4 دروس في المجموع.
ماذا ستتعلم في «IntEnum وFlag»؟
استخدم التعدادات الصحيحة وتعدادات العلامات تتمرن على Python Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Python Academy؟
لا تُشترط خبرة سابقة. Python Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «IntEnum وFlag»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Python Academy هذا؟
نعم. كل درس في Python Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- فئة Enum
- IntEnum وFlag
- أساسيات NamedTuple
- typing.NamedTuple