מניית דברים ב-Python
מאמר זה מסביר מניית דברים ב-Python.
YouTube Video
מניית דברים ב-Python
ה-enum של פייתון הוא מחלקה מיוחדת להגדרת קבועים, לשיפור קריאות ולמניעת שגיאות קוד.
מהו Enum?
Enum (קיצור של מניית דברים) היא מחלקה המשמשת להגדרת קבוצת קבועים עם שמות. בדרך כלל משתמשים בה כדי לקבץ קבועים קשורים יחד. לדוגמה, היא מתאימה לייצוג צבעים, ימי השבוע או כיוונים.
למה להשתמש ב-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() מאפשר לפייתון להקצות ערכים באופן אוטומטי, מה שמבטל את הצורך בהגדרה ידנית על ידי מתכנתים.
דוגמה ל-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 יכולים להכיל גם ערכים מרובים, כמו טאפלים. כך כל חבר יכול לשאת מידע נוסף קשור.
דוגמה לשימוש בטאפלים
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 כדגלים
מחלקת ה-enum של פייתון כוללת מחלקת Flag שניתן להשתמש בה כדגלי ביט. שימוש ב-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 חייבים להיות בעלי שמות וערכים ייחודיים. גם כאשר ערכים כפולים מותרים, פייתון נותנת קדימות אוטומטית לחבר הראשון.
סיכום
המודול enum של פייתון הוא כלי מועיל ביותר עבור קיבוץ קבוצות של קבועים, שיפור קריאות הקוד ושמירה על עקביות בקוד. שימושים מגוונים אפשריים, החל משימוש בסיסי ועד שיוך ערכים אוטומטי בעזרת auto() וכן שימוש כדגלי ביטים.
הבנה ושליטה נכונה ב-enum יכולה לשפר את איכות הקוד ולעזור במניעת שגיאות.
תוכלו לעקוב אחר המאמר שלמעלה באמצעות Visual Studio Code בערוץ היוטיוב שלנו. נא לבדוק גם את ערוץ היוטיוב.