Enum در پایتون: راهنمای جامع

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 و نحوه استفاده از آن، می‌توانید کد خود را سازماندهی‌تر و کارآمدتر کنید.

بدون دیدگاه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *