Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimanakah Saya Boleh Menggunakan dan Mewakili Enum dengan Berkesan dalam Python?

Bagaimanakah Saya Boleh Menggunakan dan Mewakili Enum dengan Berkesan dalam Python?

Susan Sarandon
Susan Sarandonasal
2024-12-25 00:23:10810semak imbas

How Can I Effectively Use and Represent Enums in Python?

Perwakilan Enum Python

Python menyediakan jenis Enum asli dalam versi 3.4 dan ke atas. Untuk versi terdahulu, anda boleh menggunakan perpustakaan pihak ketiga seperti enum34 atau aenum.

Menggunakan enum34 atau stdlib Enum:

from enum import Enum
Animal = Enum('Animal', 'ant bee cat dog')

Animal.ant  # <Animal.ant: 1>
Animal['ant']  # <Animal.ant: 1> (string lookup)
Animal.ant.name  # 'ant' (inverse lookup)

Menggunakan aenum:

from aenum import Enum
Animal = Enum('Animal', 'ant bee cat dog')

Animal.ant  # same as enum34
Animal['ant']  # same as enum34
Animal.ant.name  # same as enum34

Menggunakan Python Terdahulu Versi:

Untuk versi Python yang lebih awal, anda boleh menggunakan fungsi tersuai seperti ini:

def enum(**enums):
    return type('Enum', (), enums)

Numbers = enum(ONE=1, TWO=2, THREE='three')
Numbers.ONE  # 1
Numbers.TWO  # 2
Numbers.THREE  # 'three'

Penghitungan Automatik:

Anda juga boleh menggunakan fungsi berikut untuk pengiraan automatik:

def enum(*sequential, **named):
    enums = dict(zip(sequential, range(len(sequential))), **named)
    return type('Enum', (), enums)

Numbers = enum('ZERO', 'ONE', 'TWO')
Numbers.ZERO  # 0
Numbers.ONE  # 1

Terbalik Pemetaan:

Untuk menyokong penukaran nilai enum kembali kepada nama:

def enum(*sequential, **named):
    enums = dict(zip(sequential, range(len(sequential))), **named)
    reverse = dict((value, key) for key, value in enums.iteritems())
    enums['reverse_mapping'] = reverse
    return type('Enum', (), enums)

Numbers = enum('ZERO', 'ONE', 'TWO')
Numbers.reverse_mapping['1']  # 'ONE'

Menaip.Literal (MyPy):

Dalam MyPy , anda boleh mentakrifkan enum menggunakan Literal:

from typing import Literal

Animal = Literal['ant', 'bee', 'cat', 'dog']

def hello_animal(animal: Animal):
    print(f"hello {animal}")

Ini akan menghalang penetapan nilai bukan enum.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menggunakan dan Mewakili Enum dengan Berkesan dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn