এন

এনাম মধ্যে Python

১টি অনুশীলনী

এনাম সম্পর্কে

Python-এ একটি এনাম হলো ইউনিক নামের একটি সেট, যেখানে প্রতিটি নাম একটি ইউনিক ও কনস্ট্যান্ট মানের সাথে বাঁধা থাকে। Enums ডিফাইন করা হয় একটি Enum ক্লাস ইনহেরিট করে। বিল্ট-ইন এনাম টাইপগুলো enum মডিউলে পাওয়া যায় এবং from enum import Enum দিয়ে Enum ক্লাসটি ইমপোর্ট করা যায়।

from enum import Enum

class Color(Enum):
    RED = 1
    GREEN = 2

খেয়াল করুন, enum মেম্বারগুলোর মান যেকোনো ডেটা টাইপ হতে পারে, যেমন str, tuple, float ইত্যাদি।

class Color(Enum):
    RED = 'red'
    GREEN = 'green'

ফাংশন-কল সিনট্যাক্স ব্যবহার করেও Enums তৈরি করা যায়।

from enum import Enum

Animal = Enum('Animal', 'ANT BEE CAT DOG')
list(Animal)
#=> [<Animal.ANT: 1>, <Animal.BEE: 2>, <Animal.CAT: 3>, <Animal.DOG: 4>]

Animal.ANT.value
#=> 1

একটি enum-এর দুটি মেম্বারকে একই মান অ্যাসাইন করলে, পরে অ্যাসাইন করা মেম্বারটি আগেরটির একটি অ্যালিয়াস হয়ে যায়। একটি enum-এর দুটি ভিন্ন মেম্বারের জন্য একই নাম ব্যবহার করা যায় না।

class Color(Enum):
    RED = 1
    GREEN = 2
    ALIAS_OF_RED = 1

Color.ALIAS_OF_RED
#=> <Color.RED: 1>

এনামের মেম্বারগুলোর মধ্যে দিয়ে ইটারেশন করা যায় সাধারণ for member in সিনট্যাক্স দিয়ে:

for member in Color:
    print((member.name, member.value))
#=> (RED, 1)
#=> (GREEN, 2)

# __members__.items() helps you to loop through alias as well
for member in Color.__members__.items():
    print(member)
#=> ('RED', <Color.RED: 1>)
#=> ('GREEN', <Color.GREEN: 2>)
#=> ('ALIAS_OF_RED', <Color.RED: 1>)

Enum মেম্বারগুলো is (আইডেন্টিটি অপারেটর) বা is not দিয়ে তুলনা করা যায়। == বা != (ইকুয়ালিটি অপারেটর)ও একইভাবে কাজ করে:

a = Color.RED

a is Color.RED
#=> True

a == Color.RED
#=> True

ইন্টিজার মান অ্যাসাইন করার জন্য auto() ফাংশনটি 1 দিয়ে শুরু করে এবং পরের মানগুলো স্বয়ংক্রিয়ভাবে সেট করে।

class Shape(Enum):
    CIRCLE = auto()
    SQUARE = auto()
    OVAL = auto()

অ্যালিয়াসিং বন্ধ করতে (ভিন্ন নামে ডুপ্লিকেট মান প্রতিরোধ করতে), ক্লাস ডেকোরেটর @enum.unique ডেকোরেটরটি ব্যবহার করা যেতে পারে।

@enum.unique
class Shape(Enum):
    CIRCLE = 1
    SQUARE = 2
    TRIANGLE = 1
#=> ValueError: duplicate values found in <enum 'Shape'>: TRIANGLE -> CIRCLE

কোনো নির্দিষ্ট মানের জন্য enum মেম্বার পেতে এই নোটেশনটি ব্যবহার করা যায়: <EnumName>(<value>)।

g = Color(2)

g is Color.GREEN
#=> True

g
#=> <Color.GREEN: 2>

যেকোনো মিক্স-ইন বা ডেটা টাইপ দিয়ে Enum ক্লাস সাবক্লাস করে একটি কাস্টম রেস্ট্রিক্টেড Enum লেখা যায়। যেমন:

class StrEnum(str, Enum):
    pass

Enum সাবক্লাস করা কেবল তখনই অনুমোদিত, যখন enum কোনো মেম্বার ডিফাইন করে না। আরও বিস্তারিত ও ব্যাখ্যার জন্য enum হাউ-টু এবং enum কুকবুক দেখুন।

GitHub-এর মাধ্যমে সম্পাদনা করুন লিংকটি নতুন একটি উইন্ডো বা ট্যাবে খুলবে