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
Lepaskan: 2024-12-25 00:23:10
asal
808 orang telah melayarinya

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)
Salin selepas log masuk

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
Salin selepas log masuk

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'
Salin selepas log masuk

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
Salin selepas log masuk

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'
Salin selepas log masuk

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}")
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan