আমি এনুম 4 লাইব্রেরিটি নীচে এনাম ক্লাস তৈরি করতে ব্যবহার করছি:
class Color(Enum):
RED = 1
BLUE = 2
আমি [1, 2]কোথাও একটি তালিকা হিসাবে মুদ্রণ করতে চান । আমি কীভাবে এটি অর্জন করতে পারি?
আমি এনুম 4 লাইব্রেরিটি নীচে এনাম ক্লাস তৈরি করতে ব্যবহার করছি:
class Color(Enum):
RED = 1
BLUE = 2
আমি [1, 2]কোথাও একটি তালিকা হিসাবে মুদ্রণ করতে চান । আমি কীভাবে এটি অর্জন করতে পারি?
উত্তর:
আপনি ব্যবহার করতে পারেন IntEnum :
from enum import IntEnum
class Color(IntEnum):
RED = 1
BLUE = 2
print(int(Color.RED)) # prints 1
ইনটগুলির তালিকা পেতে:
enum_list = list(map(int, Color))
print(enum_list) # prints [1, 2]
a = [(int(v), str(v)) for v in Color]এবং তারপর print(a)।
[(color.value, color.name) for color in Color]
এনামকে যে কোনও ধরণের মান সহ ব্যবহার করতে, এটি ব্যবহার করে দেখুন:
কিছু উন্নতির সাথে আপডেট হয়েছে ... ধন্যবাদ আপনার জেফকে!
from enum import Enum
class Color(Enum):
RED = 1
GREEN = 'GREEN'
BLUE = ('blue', '#0000ff')
@staticmethod
def list():
return list(map(lambda c: c.value, Color))
print(Color.list())
ফলে:
[1, 'GREEN', ('blue', '#0000ff')]
@classmethodযে Colorক্লাসের উদাহরণ তৈরি করা দরকার । এ কারণেই staticmethodএখানে সঠিক পছন্দ বলে মনে হচ্ছে।
@classmethodএবং ব্যবহার করতে পারেন return list(map(lambda c: c.value, cls))।
@ জেফের উত্তরের উপর ভিত্তি করে, classmethodএমনটি ব্যবহারের জন্য রিফ্যাক্টার্ড যাতে আপনি কোনও এনামের জন্য একই কোডটি পুনরায় ব্যবহার করতে পারেন:
from enum import Enum
class ExtendedEnum(Enum):
@classmethod
def list(cls):
return list(map(lambda c: c.value, cls))
class OperationType(ExtendedEnum):
CREATE = 'CREATE'
STATUS = 'STATUS'
EXPAND = 'EXPAND'
DELETE = 'DELETE'
print(OperationType.list())
উত্পাদন:
['CREATE', 'STATUS', 'EXPAND', 'DELETE']
বর্গ enum.Enumহল এমন একটি শ্রেণী যা আপনার সমস্ত গণনার প্রয়োজনগুলি সমাধান করে, সুতরাং আপনাকে কেবল এটির উত্তরাধিকারী হওয়া এবং নিজের ক্ষেত্রগুলি যুক্ত করা দরকার। তারপরে, আপনাকে যা করতে হবে তা হল কেবল এটির বৈশিষ্ট্যগুলি বলা: name& value:
from enum import Enum
class Letter(Enum):
A = 1
B = 2
C = 3
print({i.name: i.value for i in Letter})
# prints {'A': 1, 'B': 2, 'C': 3}
সুতরাং Enumএকটি __members__ডিক্ট আছে। @ ওজগুর প্রস্তাবিত সমাধানটি সত্যই সেরা তবে আপনি এটি করতে পারেন যা আরও কাজ করে একই কাজ করে
[color.value for color_name, color in Color.__members__.items()]
__members__অভিধান উপকারে আসা যদি আপনি এটি মধ্যে পরিবর্তনশীল কাপড় সন্নিবেশ করতে ... কিছু পাগল অবস্থায় চেয়েছিলেন পারে।
[সম্পাদনা]
দৃশ্যত __members__কোনও অভিধান নয়, মানচিত্রের প্রক্সি। যার অর্থ আপনি সহজেই এতে আইটেম যুক্ত করতে পারবেন না।
তবে আপনি পছন্দ মতো অদ্ভুত স্টাফ MyEnum.__dict__['_member_map_']['new_key'] = 'new_value'করতে পারেন এবং তারপরে আপনি নতুন কীটি ব্যবহার করতে পারেন MyEnum.new_key.... তবে এটি কেবল একটি বাস্তবায়ন বিশদ, এবং এটি দিয়ে খেলা উচিত নয়। কালো যাদুটি রক্ষণাবেক্ষণের বিশাল ব্যয়ের সাথে প্রদান করা হয়।
__members__? এটি এক্সটেনশানগুলির মাধ্যমে নতুন Enumসদস্য তৈরি করার অনুমতি দেওয়ার এক আকর্ষণীয় উপায় । ... বিটিডব্লিউ, টেবিলটিতে একটি নতুন ( আমার কাছে ) বৈশিষ্ট্য আনার জন্য আপভোটেড ।
ব্যবহার করুন _member_names_একটি দ্রুত সহজ ফলাফলের জন্য যদি এটা শুধু নাম, অর্থাৎ
Color._member_names_
এছাড়াও, আপনার কাছে _member_map_যা উপাদানগুলির একটি আদেশযুক্ত অভিধান প্রদান করে। এই ফাংশনটি একটি দেয় collections.OrderedDict, তাই আপনার সাথে Color._member_names_.items()এবং Color._member_names_.values()খেলতে হবে। যেমন
return list(map(lambda x: x.value, Color._member_map_.values()))
রঙের সমস্ত বৈধ মান প্রদান করবে
আপনি ইটার () ফাংশনটি ব্যবহার করতে পারেন:
from enum import IntEnum
class Color(IntEnum):
RED = 1
BLUE = 2
l=[]
for i in iter(Color):
l.append(i.value)
print(l)