Enum در پایتون: راهنمای جامع
در برنامهنویسی، اغلب با مجموعهای از مقادیر ثابت و نامگذاری شده مواجه میشویم که نشاندهنده حالتها، گزینهها یا دستهبندیهای مختلف هستند. برای مثال، در یک برنامه شبیهسازی آب و هوا، ممکن است حالتهای آب و هوا شامل “آفتابی”، “بارانی”، “ابرناک” و “برفی” باشند. استفاده مستقیم از اعداد صحیح یا رشتهها برای نمایش این حالتها میتواند منجر به خطا و کاهش خوانایی کد شود. اینجاست که Enum (مخفف Enumeration) به کمک میآید.
Enum چیست؟
Enum یک نوع دادهای است که مجموعهای از نامها (عضو) را به مقادیر ثابت مرتبط میکند. به عبارت دیگر، Enum به شما امکان میدهد مجموعهای از ثابتها را تعریف کنید که هر کدام یک نام معنادار دارند. این کار باعث میشود کد شما خواناتر، قابل نگهداریتر و کمتر مستعد خطا شود.
چرا از Enum استفاده کنیم؟
استفاده از Enum مزایای متعددی دارد:
- خوانایی کد: به جای استفاده از اعداد یا رشتههای مبهم، از نامهای معنادار برای نشان دادن مقادیر ثابت استفاده میکنید.
- جلوگیری از خطا: Enum به شما کمک میکند از تخصیص مقادیر نامعتبر به متغیرها جلوگیری کنید.
- قابلیت نگهداری: تغییر مقادیر ثابت در Enum آسانتر و ایمنتر از تغییر مقادیر پراکنده در سراسر کد است.
- سازماندهی کد: Enum به شما کمک میکند کد خود را سازماندهی کنید و آن را به بخشهای منطقی تقسیم کنید.
Enum در پایتون
پایتون از نسخه 3.4 به بعد، پشتیبانی داخلی از Enum را ارائه میدهد. برای استفاده از Enum، باید ماژول enum را وارد کنید.
from enum import Enum
تعریف یک Enum ساده
برای تعریف یک Enum، باید یک کلاس جدید ایجاد کنید که از کلاس Enum ارثبری کند. اعضای Enum را به عنوان متغیرهای کلاسی تعریف میکنید.
from enum import Enum
class Color(Enum):
RED = 1
GREEN = 2
BLUE = 3
در این مثال، یک Enum به نام Color تعریف کردهایم که سه عضو دارد: RED، GREEN و BLUE. به هر عضو یک مقدار عددی اختصاص داده شده است.
دسترسی به اعضای Enum
برای دسترسی به اعضای Enum، میتوانید از نام کلاس Enum و نام عضو استفاده کنید.
from enum import Enum
class Color(Enum):
RED = 1
GREEN = 2
BLUE = 3
print(Color.RED)
print(Color.GREEN.value)
خروجی:
Color.RED 2
همانطور که میبینید، Color.RED خود عضو Enum را برمیگرداند، در حالی که Color.GREEN.value مقدار مرتبط با عضو GREEN را برمیگرداند.
مقایسه اعضای Enum
میتوانید اعضای Enum را با استفاده از عملگرهای مقایسه مقایسه کنید.
from enum import Enum
class Color(Enum):
RED = 1
GREEN = 2
BLUE = 3
print(Color.RED == Color.RED)
print(Color.RED == Color.GREEN)
print(Color.RED != Color.BLUE)
خروجی:
True False True
تکرار روی اعضای Enum
میتوانید روی اعضای Enum با استفاده از یک حلقه for تکرار کنید.
from enum import Enum
class Color(Enum):
RED = 1
GREEN = 2
BLUE = 3
for color in Color:
print(color)
خروجی:
Color.RED Color.GREEN Color.BLUE
Enum با مقادیر غیر عددی
Enum میتواند با مقادیر غیر عددی مانند رشتهها نیز کار کند.
from enum import Enum
class Direction(Enum):
NORTH = "شمال"
SOUTH = "جنوب"
EAST = "شرق"
WEST = "غرب"
print(Direction.NORTH.value)
خروجی:
شمال
Enum با توابع
میتوانید توابع را به اعضای Enum مرتبط کنید. این کار میتواند برای انجام عملیات خاص بر روی هر عضو Enum مفید باشد.
from enum import Enum
class Operation(Enum):
ADD = lambda x, y: x + y
SUBTRACT = lambda x, y: x - y
MULTIPLY = lambda x, y: x * y
DIVIDE = lambda x, y: x / y
print(Operation.ADD(5, 3))
print(Operation.DIVIDE(10, 2))
خروجی:
8 5.0
Enum و Type Hints
Enum را میتوان در Type Hints برای بهبود خوانایی و قابلیت نگهداری کد استفاده کرد.
from enum import Enum
class Status(Enum):
ACTIVE = 1
INACTIVE = 2
PENDING = 3
def set_status(status: Status):
print(f"وضعیت تنظیم شد: {status}")
set_status(Status.ACTIVE)
Enum های Flag
Enum های Flag به شما امکان میدهند چندین مقدار را با استفاده از عملگرهای بیتی ترکیب کنید. این برای نشان دادن مجموعهای از گزینهها یا ویژگیها مفید است. برای ایجاد یک Enum Flag، باید کلاس Enum را از Flag ارثبری کنید و از ویژگی __or__ برای ترکیب مقادیر استفاده کنید.
from enum import Flag
class Permissions(Flag):
READ = 1
WRITE = 2
EXECUTE = 4
print(Permissions.READ | Permissions.WRITE)
print(Permissions.READ & Permissions.WRITE)
خروجی:
Permissions.READ|WRITE Permissions.READ
موارد پیشرفتهتر
Enum در پایتون امکانات پیشرفتهتری نیز دارد، مانند:
- Auto: برای اختصاص خودکار مقادیر به اعضای Enum.
- IntEnum: برای ایجاد Enum هایی که مقادیر آنها اعداد صحیح هستند.
- Mixins: برای افزودن قابلیتهای اضافی به Enum.
نتیجهگیری
Enum یک ابزار قدرتمند برای مدیریت مجموعهای از مقادیر ثابت و نامگذاری شده در پایتون است. استفاده از Enum میتواند خوانایی، قابلیت نگهداری و ایمنی کد شما را بهبود بخشد. با درک مفاهیم اساسی Enum و نحوه استفاده از آن، میتوانید کد خود را سازماندهیتر و کارآمدتر کنید.

بدون دیدگاه