מניית דברים ב-Python

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

YouTube Video