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

56

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.

Tôi có một quốc tịch enum:

class Nationality:
        Poland='PL'
        Germany='DE'
        France='FR'

Làm thế nào tôi có thể chuyển đổi một số enum này thành int theo cách này hoặc tương tự:

position_of_enum = int(Nationality.Poland)  # here I want to get 0

Tôi biết rằng tôi có thể làm điều đó nếu tôi có mã bằng cách:

counter=0
for member in dir(Nationality):
    if getattr(Nationality, member) == code:
        lookFor = member
        counter += 1
return counter

Nhưng tôi không có, và cách này trông quá lớn đối với Python. Tôi chắc chắn rằng có một cái gì đó đơn giản hơn nhiều.

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

Ethan Furman

60.2K18 Huy hiệu vàng147 Huy hiệu bạc221 Huy hiệu đồng18 gold badges147 silver badges221 bronze badges

Khi được hỏi ngày 19 tháng 5 năm 2011 lúc 14:57May 19, 2011 at 14:57

user278618user278618user278618

18,5K42 Huy hiệu vàng124 Huy hiệu bạc195 Huy hiệu Đồng42 gold badges124 silver badges195 bronze badges

1

Vui lòng sử dụng intenum

from enum import IntEnum

class loggertype(IntEnum):
    Info = 0
    Warning = 1
    Error = 2
    Fatal = 3

int(loggertype.Info)
0

Đã trả lời ngày 3 tháng 4 năm 2018 lúc 9:37Apr 3, 2018 at 9:37

3

Sử dụng backport

counter=0
for member in dir(Nationality):
    if getattr(Nationality, member) == code:
        lookFor = member
        counter += 1
return counter
4 hoặc AENUM1, bạn có thể tạo một
counter=0
for member in dir(Nationality):
    if getattr(Nationality, member) == code:
        lookFor = member
        counter += 1
return counter
5 chuyên dụng:

# using enum34
from enum import Enum

class Nationality(Enum):

    PL = 0, 'Poland'
    DE = 1, 'Germany'
    FR = 2, 'France'

    def __new__(cls, value, name):
        member = object.__new__(cls)
        member._value_ = value
        member.fullname = name
        return member

    def __int__(self):
        return self.value

và đang sử dụng:

>>> print(Nationality.PL)
Nationality.PL
>>> print(int(Nationality.PL))
0
>>> print(Nationality.PL.fullname)
'Poland'

Trên đây dễ dàng được viết bằng cách sử dụng

counter=0
for member in dir(Nationality):
    if getattr(Nationality, member) == code:
        lookFor = member
        counter += 1
return counter
61:

# using aenum
from aenum import Enum, MultiValue

class Nationality(Enum):
    _init_ = 'value fullname'
    _settings_ = MultiValue

    PL = 0, 'Poland'
    DE = 1, 'Germany'
    FR = 2, 'France'

    def __int__(self):
        return self.value

có chức năng bổ sung của:

>>> Nationality('Poland')
<Nationality.PL: 0>

1 Tiết lộ: Tôi là tác giả của Python Stdlib

counter=0
for member in dir(Nationality):
    if getattr(Nationality, member) == code:
        lookFor = member
        counter += 1
return counter
5, thư viện
counter=0
for member in dir(Nationality):
    if getattr(Nationality, member) == code:
        lookFor = member
        counter += 1
return counter
4 và thư viện liệt kê nâng cao (
counter=0
for member in dir(Nationality):
    if getattr(Nationality, member) == code:
        lookFor = member
        counter += 1
return counter
6).

Đã trả lời ngày 13 tháng 3 năm 2016 lúc 0:02Mar 13, 2016 at 0:02

Ethan Furmanethan FurmanEthan Furman

60.2K18 Huy hiệu vàng147 Huy hiệu bạc221 Huy hiệu đồng18 gold badges147 silver badges221 bronze badges

1

Khi được hỏi ngày 19 tháng 5 năm 2011 lúc 14:57

18,5K42 Huy hiệu vàng124 Huy hiệu bạc195 Huy hiệu Đồng

code_lookup = ('PL', 'DE', 'FR')
return code_lookup.index('PL') 

Vui lòng sử dụng intenum

code_lookup = {'PL':0, 'FR':2, 'DE':3}
return code_lookup['PL']  

Đã trả lời ngày 3 tháng 4 năm 2018 lúc 9:37

Sử dụng backport

counter=0
for member in dir(Nationality):
    if getattr(Nationality, member) == code:
        lookFor = member
        counter += 1
return counter
4 hoặc AENUM1, bạn có thể tạo một
counter=0
for member in dir(Nationality):
    if getattr(Nationality, member) == code:
        lookFor = member
        counter += 1
return counter
5 chuyên dụng:

position_of_enum = int(Nationality.Poland)  # here I want to get 0
0

per1234

và đang sử dụng:5 silver badges13 bronze badges

Trên đây dễ dàng được viết bằng cách sử dụng

counter=0
for member in dir(Nationality):
    if getattr(Nationality, member) == code:
        lookFor = member
        counter += 1
return counter
61:May 19, 2011 at 15:07

có chức năng bổ sung của:Joe Kington

1 Tiết lộ: Tôi là tác giả của Python Stdlib

counter=0
for member in dir(Nationality):
    if getattr(Nationality, member) == code:
        lookFor = member
        counter += 1
return counter
5, thư viện
counter=0
for member in dir(Nationality):
    if getattr(Nationality, member) == code:
        lookFor = member
        counter += 1
return counter
4 và thư viện liệt kê nâng cao (
counter=0
for member in dir(Nationality):
    if getattr(Nationality, member) == code:
        lookFor = member
        counter += 1
return counter
6).70 gold badges591 silver badges458 bronze badges

2

position_of_enum = int(Nationality.Poland)  # here I want to get 0
1

Đã trả lời ngày 13 tháng 3 năm 2016 lúc 0:02

position_of_enum = int(Nationality.Poland)  # here I want to get 0
2

Ethan Furmanethan FurmanOct 23, 2020 at 10:33

Có nhiều cách tốt hơn (và nhiều hơn "Pythonic") làm những gì bạn muốn.Morris

Sử dụng một tuple (hoặc danh sách nếu cần sửa đổi), trong đó đơn đặt hàng sẽ được bảo tồn:2 gold badges9 silver badges21 bronze badges

0

Hoặc sử dụng một từ điển dọc theo các dòng của:

position_of_enum = int(Nationality.Poland)  # here I want to get 0
3

Theo tôi, điều thứ hai là thích hợp hơn, vì nó dễ đọc và rõ ràng hơn.

Một

from enum import IntEnum

class loggertype(IntEnum):
    Info = 0
    Warning = 1
    Error = 2
    Fatal = 3

int(loggertype.Info)
0
0 cũng có thể hữu ích, trong trường hợp cụ thể của bạn, mặc dù nó có thể là quá mức cần thiết:May 19, 2011 at 15:06

8765 Huy hiệu bạc13 Huy hiệu Đồngandrewdski

Đã trả lời ngày 19 tháng 5 năm 2011 lúc 15:072 gold badges19 silver badges19 bronze badges

Joe Kingtonjoe Kington

265K70 Huy hiệu vàng591 Huy hiệu bạc458 Huy hiệu Đồng

position_of_enum = int(Nationality.Poland)  # here I want to get 0
4

Cần truy cập Tuple theo chỉ mục nếu sử dụng dấu phẩy:May 19, 2011 at 15:00

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

Đã trả lời ngày 23 tháng 10 năm 2020 lúc 10:33blubb

Morrismorris2 gold badges40 silver badges76 bronze badges

1

8612 Huy hiệu vàng9 Huy hiệu bạc21 Huy hiệu đồng

position_of_enum = int(Nationality.Poland)  # here I want to get 0
5

Tại sao bạn không xác định các giá trị là số thay vì chuỗi:

Nếu bạn cần truy cập tên hai chữ cái, bạn chỉ cần cung cấp một bảng ánh xạ chúng. (Hoặc một từ điển ánh xạ theo cách khác, v.v.)May 19, 2011 at 15:18

Đã trả lời ngày 19 tháng 5 năm 2011 lúc 15:06janislaw

Andrewdskiandrewdski1 silver badge7 bronze badges

5.0592 Huy hiệu vàng19 Huy hiệu bạc19 Huy hiệu đồng

position_of_enum = int(Nationality.Poland)  # here I want to get 0
6

Output:

position_of_enum = int(Nationality.Poland)  # here I want to get 0
7

Bạn không thể. Python không lưu trữ thứ tự các yếu tố lớp và

from enum import IntEnum

class loggertype(IntEnum):
    Info = 0
    Warning = 1
    Error = 2
    Fatal = 3

int(loggertype.Info)
0
1 sẽ trả lại chúng theo bất kỳ thứ tự nào.

Nhìn từ nhận xét của bạn rằng bạn thực sự yêu cầu ánh xạ từ chuỗi đến số nguyên, thực tế bạn nên làm chính xác điều đó:Nov 24, 2021 at 18:23

position_of_enum = int(Nationality.Poland)  # here I want to get 0
8

Đã trả lời ngày 19 tháng 5 năm 2011 lúc 15:00

position_of_enum = int(Nationality.Poland)  # here I want to get 0
9

BlubbblubbMar 19, 2020 at 8:08

counter=0
for member in dir(Nationality):
    if getattr(Nationality, member) == code:
        lookFor = member
        counter += 1
return counter
0

Đã trả lời ngày 19 tháng 5 năm 2011 lúc 15:00

counter=0
for member in dir(Nationality):
    if getattr(Nationality, member) == code:
        lookFor = member
        counter += 1
return counter
1

Blubbblubb

counter=0
for member in dir(Nationality):
    if getattr(Nationality, member) == code:
        lookFor = member
        counter += 1
return counter
2

9.1312 Huy hiệu vàng40 Huy hiệu bạc76 Huy hiệu đồngJul 15 at 3:50

Tôi đã thấy một cái gì đó như:AboSari

Bọc nó trong một lớp học và viola, bạn có một không gian tên cho sự liệt kê.2 silver badges1 bronze badge

1

Đã trả lời ngày 19 tháng 5 năm 2011 lúc 15:18

counter=0
for member in dir(Nationality):
    if getattr(Nationality, member) == code:
        lookFor = member
        counter += 1
return counter
3

JanislawjanislawSep 4 at 19:48

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

3021 Huy hiệu bạc7 Huy hiệu đồngThinkal VB

Một cách đơn giản để đạt được điều này:1 silver badge10 bronze badges

Làm thế nào để bạn chuyển đổi enum sang int in python?

Sử dụng lớp intenum từ mô -đun enum để chuyển đổi enum thành một số nguyên trong python.Bạn có thể sử dụng lớp tự động () nếu giá trị chính xác là không quan trọng.Để có được giá trị của một thành viên enum, hãy sử dụng thuộc tính giá trị trên thành viên.. You can use the auto() class if the exact value is unimportant. To get a value of an enum member, use the value attribute on the member.

Làm thế nào để bạn chuyển đổi enum sang int?

Để chuyển đổi một enum thành int, chúng ta có thể: typecast giá trị enum thành int. Sử dụng phương thức toint32 của lớp chuyển đổi.Typecast the enum value to int . Use the ToInt32 method of the Convert class.

Có thể được coi là int không?

Giá trị Enum không thể được coi là INT theo mặc định bởi vì sau đó bạn sẽ có thể cung cấp bất kỳ số nguyên nào và sẽ không có kiểm tra thời gian biên dịch để xác nhận rằng số nguyên được cung cấp trên thực tế tồn tại dưới dạng giá trị trong liệt kê. because then you would be able to provide any integer and there would be no compile time check to validate that the provided integer does in fact exist as a value in the Enumeration.

Làm thế nào để bạn trả về giá trị enum trong python?

Để có được một giá trị trong một enum trong Python:..
Sử dụng ký hiệu DOT để truy cập thành viên Enum cụ thể, ví dụ:Màu sắc.MÀU XANH LÁ ..
Truy cập thuộc tính giá trị trên thành viên Enum, ví dụ:Màu sắc.MÀU XANH LÁ.giá trị ..