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!