Hướng dẫn python convert int to enum - python chuyển đổi int thành enum

Sử dụng tính năng Enum mới (thông qua Backport ENUM34) với Python 2.7.6.

Với định nghĩa sau, làm thế nào tôi có thể chuyển đổi INT thành giá trị enum tương ứng?

from enum import Enum

class Fruit(Enum):
    Apple = 4
    Orange = 5
    Pear = 6

Tôi biết tôi có thể tạo ra một loạt các câu chuyện if để thực hiện chuyển đổi nhưng có một cách dễ dàng để chuyển đổi? Về cơ bản, tôi muốn một hàm convertinttofruit (int) trả về giá trị enum.

Trường hợp sử dụng của tôi là tôi có một tệp hồ sơ CSV trong đó tôi đang đọc từng bản ghi vào một đối tượng. Một trong các trường tệp là trường số nguyên đại diện cho một bảng liệt kê. Vì tôi đang điền đối tượng, tôi muốn chuyển đổi trường số nguyên đó từ tệp thành giá trị enum tương ứng trong đối tượng.

Khi được hỏi ngày 30 tháng 5 năm 2014 lúc 9:50May 30, 2014 at 9:50

Hướng dẫn python convert int to enum - python chuyển đổi int thành enum

Bạn 'gọi' lớp Enum:

Fruit(5)

Để biến

Fruit(5)
0 thành
Fruit(5)
1:

>>> from enum import Enum
>>> class Fruit(Enum):
...     Apple = 4
...     Orange = 5
...     Pear = 6
... 
>>> Fruit(5)

Từ quyền truy cập chương trình đến các thành viên liệt kê và phần thuộc tính của họ trong tài liệu:

Đôi khi, nó rất hữu ích để truy cập các thành viên trong các lập trình theo chương trình (nghĩa là các tình huống trong đó

Fruit(5)
2 won đã làm vì màu chính xác không được biết đến trong thời gian viết chương trình). Enum cho phép truy cập như vậy:

>>> Color(1)

>>> Color(3)

Trong một lưu ý liên quan: Để ánh xạ một giá trị chuỗi chứa tên của thành viên enum, hãy sử dụng đăng ký:

>>> s = 'Apple'
>>> Fruit[s]

Đã trả lời vào ngày 30 tháng 5 năm 2014 lúc 10:00May 30, 2014 at 10:00

Martijn Pieters ♦ Martijn PietersMartijn Pieters

993K277 Huy hiệu vàng3914 Huy hiệu bạc3258 Huy hiệu đồng277 gold badges3914 silver badges3258 bronze badges

5

Tôi nghĩ rằng theo các từ đơn giản là chuyển đổi giá trị

Fruit(5)
4 thành Enum bằng cách gọi
Fruit(5)
6, sau đó truy cập
Fruit(5)
7 của đối tượng Enum:

my_fruit_from_int = Fruit(5) #convert to int
fruit_name = my_fruit_from_int.name #get the name
print(fruit_name) #Orange will be printed here

Hoặc là một chức năng:

def convert_int_to_fruit(int_value):
    try:
        my_fruit_from_int = Fruit(int_value)
        return my_fruit_from_int.name
    except:
        return None

Đã trả lời ngày 31 tháng 3 năm 2019 lúc 7:55Mar 31, 2019 at 7:55

Hướng dẫn python convert int to enum - python chuyển đổi int thành enum

Ali Ezzat Odehali Ezzat OdehAli Ezzat Odeh

2.0731 Huy hiệu vàng17 Huy hiệu bạc17 Huy hiệu đồng1 gold badge17 silver badges17 bronze badges

Tôi muốn một cái gì đó tương tự để tôi có thể truy cập vào một phần của cặp giá trị từ một tham chiếu duy nhất. Phiên bản vani:

#!/usr/bin/env python3


from enum import IntEnum


class EnumDemo(IntEnum):
    ENUM_ZERO       = 0
    ENUM_ONE        = 1
    ENUM_TWO        = 2
    ENUM_THREE      = 3
    ENUM_INVALID    = 4


#endclass.


print('Passes')
print('1) %d'%(EnumDemo['ENUM_TWO']))
print('2) %s'%(EnumDemo['ENUM_TWO']))
print('3) %s'%(EnumDemo.ENUM_TWO.name))
print('4) %d'%(EnumDemo.ENUM_TWO))
print()


print('Fails')
print('1) %d'%(EnumDemo.ENUM_TWOa))

Thất bại ném một ngoại lệ như mong đợi.

Một phiên bản mạnh mẽ hơn:

#!/usr/bin/env python3


class EnumDemo():


    enumeration =   (
                        'ENUM_ZERO',    # 0.
                        'ENUM_ONE',     # 1.
                        'ENUM_TWO',     # 2.
                        'ENUM_THREE',   # 3.
                        'ENUM_INVALID'  # 4.
                    )


    def name(self, val):
        try:

            name = self.enumeration[val]
        except IndexError:

            # Always return last tuple.
            name = self.enumeration[len(self.enumeration) - 1]

        return name


    def number(self, val):
        try:

            index = self.enumeration.index(val)
        except (TypeError, ValueError):

            # Always return last tuple.
            index = (len(self.enumeration) - 1)

        return index


#endclass.


print('Passes')
print('1) %d'%(EnumDemo().number('ENUM_TWO')))
print('2) %s'%(EnumDemo().number('ENUM_TWO')))
print('3) %s'%(EnumDemo().name(1)))
print('4) %s'%(EnumDemo().enumeration[1]))
print()
print('Fails')
print('1) %d'%(EnumDemo().number('ENUM_THREEa')))
print('2) %s'%(EnumDemo().number('ENUM_THREEa')))
print('3) %s'%(EnumDemo().name(11)))
print('4) %s'%(EnumDemo().enumeration[-1]))

Khi không được sử dụng chính xác, điều này tránh tạo ra một ngoại lệ và thay vào đó, hãy truyền lại một dấu hiệu lỗi. Một cách pythonic hơn để làm điều này sẽ là truyền lại "Không" nhưng ứng dụng cụ thể của tôi sử dụng trực tiếp văn bản.

Đã trả lời ngày 13 tháng 9 năm 2019 lúc 14:11Sep 13, 2019 at 14:11

1

Làm cách nào để chuyển đổi INT thành Enum trong Python?

Sử dụng dấu ngoặc đơn để chuyển đổi số nguyên thành enum trong Python, ví dụ:In (kích thước (1)).Bạn có thể chuyển giá trị số nguyên của một thành viên enum như một đối số cho lớp và nó sẽ trả lại thành viên enum.Đã sao chép!, e.g. print(Sizes(1)) . You can pass the integer value of an enum member as an argument to the class and it will return the enum member. Copied!

Bạn có thể chuyển một int cho một enum?

Bạn có thể gõ rõ ràng đúc một int vào một loại enum cụ thể, như được hiển thị bên dưới., as shown below.

Enum có thể được số nguyên không?

Không, chúng ta chỉ có thể có các chuỗi là yếu tố trong một bảng liệt kê.Sử dụng các chuỗi trong đó, tạo ra một lỗi thời gian biên dịch.. Using strings in it, generates a compile time error.

Làm thế nào để bạn tạo ra một enum trong Python?

Các liệt kê trong Python được triển khai bằng cách sử dụng mô -đun có tên là En Enum.Liệt kê được tạo bằng cách sử dụng các lớp ...
Enums có thể được hiển thị dưới dạng chuỗi hoặc repr ..
Enums có thể được kiểm tra các loại của họ bằng cách sử dụng loại () ..
Từ khóa tên của người Viking được sử dụng để hiển thị tên của thành viên enum ..