Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

enum - รองรับการแจงนับใน Python


การแจงนับคือชุดของตัวระบุ (สมาชิก) ที่กำหนดค่าที่ไม่ซ้ำกันและคงที่ ในการแจงนับ สมาชิกสามารถเปรียบเทียบได้โดยใช้ข้อมูลประจำตัว ออบเจ็กต์การแจงนับยังสามารถตัดทอนได้

โมดูล enum กำหนดคลาสต่อไปนี้

อีนุม :คลาสพื้นฐานสำหรับการสร้างค่าคงที่ที่แจกแจง

IntEnum :คลาสพื้นฐานสำหรับการสร้างค่าคงที่ที่แจกแจงที่เป็นคลาสย่อยของ int ด้วย

การแจงนับถูกสร้างขึ้นโดยใช้ไวยากรณ์คลาส

#enumexample.py
from enum import Enum
class langs(Enum):
Python = 1
Java = 2
Cpp = 3
Ruby = 4

สมาชิกการแจงนับมีการแสดงสตริงที่มนุษย์อ่านได้และการแสดงตัวแทน

>>> from enumexample import langs
>>> print (langs.Python)
langs.Python
>>> print (repr(langs.Python))
<langs.Python: 1>

สมาชิก enum แต่ละคนมีคุณสมบัติชื่อและค่า

>>> x = langs.Python
>>> x.name
'Python'
>>> x.value
1

คุณสามารถใช้ลูปเพื่อวนซ้ำสมาชิกทั้งหมดได้

>>> for lang in langs:
print (lang.name, lang.value)
Python 1
Java 2
Cpp 3
Ruby 4

สมาชิกสามารถเข้าถึงได้ด้วยความช่วยเหลือของค่าหรือตัวตน

>>> langs(3)
<langs.Cpp: 3>
>>> langs['Java']
<langs.Java: 2>

ตัวดำเนินการข้อมูลประจำตัวเป็นและไม่สามารถใช้เปรียบเทียบสมาชิกของ enum ได้

>>> x = langs(2)
>>> y = langs(4)
>>> x is y
False

การมีสมาชิก enum สองคนที่มีชื่อเดียวกันนั้นไม่ถูกต้อง อย่างไรก็ตาม สมาชิก enum สองคนได้รับอนุญาตให้มีค่าเท่ากัน เปลี่ยน enumexample.py เป็นดังต่อไปนี้:

from enum import Enum
class langs(Enum):
Python = 1
Java = 2
Cpp = 3
Ruby = 4
Cplusplus = 3
>>> from enumexample import langs
>>> langs.Cpp
<langs.Cpp: 3>
>>> langs.Cplusplus
<langs.Cpp: 3>
>>> langs(3)
<langs.Cpp: 3>

ตามค่าเริ่มต้น การแจงนับสามารถมีได้หลายชื่อเป็นนามแฝงสำหรับค่าเดียวกัน เพื่อให้แน่ใจว่ามีค่าที่ไม่ซ้ำกัน ให้ใช้ @enum.unique A class decorator สำหรับการแจงนับโดยเฉพาะ