מניית דברים ב-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 בערוץ היוטיוב שלנו. נא לבדוק גם את ערוץ היוטיוב.