Python dapatkan enum dari nilai

Anda dapat menambahkan metode __str___ ke enum Anda, jika yang Anda inginkan hanyalah memberikan representasi string khusus. Ini juga akan memungkinkan Anda untuk mencetaknya dengan cara itu juga dalam daftar

Show

from enum import Enum


class D(Enum):
    def __str__(self):
        return str(self.value)

    x = 1
    y = 2


print(D.x)

Keluaran. 1

Berikan komentar jika Anda memiliki keraguan dan saran tentang topik Python enum ini

Catatan. IDE. PyCharm 2021. 3. 3 (Edisi Komunitas)

Windows 10

Piton 3. 10. 1

Semua Contoh Python ada di Python 3, jadi Mungkin berbeda dari python 2 atau versi yang ditingkatkan

Python dapatkan enum dari nilai

Rohit

Gelar dalam Ilmu Komputer dan Insinyur. Pengembang Aplikasi dan memiliki banyak pengalaman bahasa Pemrograman. Antusias terhadap teknologi & suka belajar teknis

Beberapa bahasa pemrograman, seperti Java dan C++, menyertakan sintaks yang mendukung tipe data yang dikenal sebagai enumerasi, atau hanya enum. Tipe data ini memungkinkan Anda untuk membuat kumpulan konstanta terkait semantik yang dapat Anda akses melalui pencacahan itu sendiri. Python tidak memiliki sintaks khusus untuk enum. Namun, pustaka standar Python memiliki modul

>>> from enum import Enum

>>> class Grade(Enum):
..     A = 90
..     B = 80
..     C = 70
..     D = 60
..     F = 0
...

>>> list(Grade)
[
    ,
    ,
    ,
    ,
    
]
1 yang mendukung pencacahan melalui kelas
>>> from enum import Enum

>>> class Grade(Enum):
..     A = 90
..     B = 80
..     C = 70
..     D = 60
..     F = 0
...

>>> list(Grade)
[
    ,
    ,
    ,
    ,
    
]
2

Jika Anda berasal dari bahasa dengan pencacahan, dan Anda terbiasa bekerja dengannya, atau jika Anda hanya ingin mempelajari cara menggunakan pencacahan dengan Python, maka tutorial ini cocok untuk Anda

Dalam tutorial ini, Anda akan mempelajari caranya

  • Buat pencacahan konstanta menggunakan kelas
    >>> from enum import Enum
    
    >>> class Grade(Enum):
    ..     A = 90
    ..     B = 80
    ..     C = 70
    ..     D = 60
    ..     F = 0
    ...
    
    >>> list(Grade)
    [
        ,
        ,
        ,
        ,
        
    ]
    
    2 Python
  • Bekerja dengan pencacahan dan anggotanya dengan Python
  • Sesuaikan kelas pencacahan dengan fungsi baru
  • Contoh kode praktis untuk memahami mengapa Anda menggunakan pencacahan

Selain itu, Anda akan menjelajahi jenis pencacahan khusus lainnya yang hidup di

>>> from enum import Enum

>>> class Grade(Enum):
..     A = 90
..     B = 80
..     C = 70
..     D = 60
..     F = 0
...

>>> list(Grade)
[
    ,
    ,
    ,
    ,
    
]
1, termasuk
>>> from enum import Enum

>>> class Grade(Enum):
..     A = 90
..     B = 80
..     C = 70
..     D = 60
..     F = 0
...

>>> list(Grade)
[
    ,
    ,
    ,
    ,
    
]
5,
>>> from enum import Enum

>>> class Grade(Enum):
..     A = 90
..     B = 80
..     C = 70
..     D = 60
..     F = 0
...

>>> list(Grade)
[
    ,
    ,
    ,
    ,
    
]
6, dan
>>> from enum import Enum

>>> class Grade(Enum):
..     A = 90
..     B = 80
..     C = 70
..     D = 60
..     F = 0
...

>>> list(Grade)
[
    ,
    ,
    ,
    ,
    
]
7. Mereka akan membantu Anda membuat enum khusus

Untuk mengikuti tutorial ini, Anda harus terbiasa dengan pemrograman berorientasi objek dan pewarisan dalam Python

Kode sumber. Klik di sini untuk mengunduh kode sumber gratis yang akan Anda gunakan untuk membuat enumerasi dengan Python

Mengenal Enumerasi dengan Python

Beberapa bahasa pemrograman, termasuk Java dan C++, memiliki enumerasi asli atau tipe data enum sebagai bagian dari sintaksnya. Tipe data ini memungkinkan Anda membuat kumpulan konstanta bernama, yang dianggap sebagai anggota enum yang berisi. Anda dapat mengakses anggota melalui pencacahan itu sendiri

Pencacahan sangat berguna saat Anda perlu mendefinisikan dan kumpulan nilai konstanta serupa atau terkait yang mungkin atau mungkin tidak memiliki makna semantik dalam kode Anda

Hari dalam seminggu, bulan, dan musim dalam setahun, arah mata angin Bumi, kode status program, kode status HTTP, warna lampu lalu lintas, dan paket harga layanan web adalah contoh enumerasi yang bagus dalam pemrograman. Secara umum, Anda dapat menggunakan enum setiap kali Anda memiliki variabel yang dapat mengambil salah satu dari sekumpulan nilai yang mungkin terbatas

Python tidak memiliki tipe data enum sebagai bagian dari sintaksnya. Untungnya, Python 3. 4 menambahkan modul ke perpustakaan standar. Modul ini menyediakan kelas untuk mendukung pencacahan tujuan umum dengan Python

Pencacahan diperkenalkan oleh PEP 435, yang mendefinisikannya sebagai berikut

Pencacahan adalah sekumpulan nama simbolis yang terikat pada nilai unik dan konstan. Dalam pencacahan, nilai-nilai dapat dibandingkan dengan identitas, dan pencacahan itu sendiri dapat diulang. (Sumber)

Sebelum menambahkan pustaka standar ini, Anda dapat membuat sesuatu yang mirip dengan pencacahan dengan menentukan urutan konstanta yang serupa atau terkait. Untuk tujuan ini, pengembang Python sering menggunakan idiom berikut

>>>

>>> RED, GREEN, YELLOW = range(3)

>>> RED
0

>>> GREEN
1
_

Meskipun idiom ini berfungsi, idiom ini tidak dapat diskalakan dengan baik saat Anda mencoba mengelompokkan sejumlah besar konstanta terkait. Ketidaknyamanan lainnya adalah konstanta pertama akan memiliki nilai

>>> from enum import Enum

>>> class Size(Enum):
..     S = "small"
..     M = "medium"
..     L = "large"
..     XL = "extra large"
...

>>> list(Size)
[
    ,
    ,
    ,
    
]
0, yang salah dalam Python. Ini bisa menjadi masalah dalam situasi tertentu, terutama yang melibatkan tes Boolean

Catatan. Jika Anda menggunakan versi Python sebelum 3. 4, maka Anda dapat membuat enumerasi dengan menginstal pustaka enum34, yang merupakan backport dari pustaka standar

>>> from enum import Enum

>>> class Grade(Enum):
..     A = 90
..     B = 80
..     C = 70
..     D = 60
..     F = 0
...

>>> list(Grade)
[
    ,
    ,
    ,
    ,
    
]
1. Pustaka pihak ketiga aenum juga bisa menjadi pilihan bagi Anda

Dalam kebanyakan kasus, pencacahan dapat membantu Anda menghindari kelemahan dari idiom di atas. Mereka juga akan membantu Anda menghasilkan kode yang lebih terorganisir, mudah dibaca, dan kuat. Pencacahan memiliki beberapa manfaat, beberapa di antaranya berhubungan dengan kemudahan pengkodean

  • Mengizinkan untuk mengelompokkan konstanta terkait dengan mudah dalam semacam namespace
  • Mengizinkan perilaku tambahan dengan metode khusus yang beroperasi pada anggota enum atau enum itu sendiri
  • Memberikan akses cepat dan fleksibel ke anggota enum
  • Mengaktifkan iterasi langsung atas anggota, termasuk nama dan nilainya
  • Memfasilitasi penyelesaian kode dalam IDE dan editor
  • Mengaktifkan pemeriksaan jenis dan kesalahan dengan pemeriksa statis
  • Menyediakan pusat nama yang dapat dicari
  • Mengurangi kesalahan ejaan saat menggunakan anggota pencacahan

Mereka juga membuat kode Anda kuat dengan memberikan manfaat berikut

  • Memastikan nilai konstanta yang tidak dapat diubah selama eksekusi kode
  • Menjamin keamanan jenis dengan membedakan nilai yang sama yang dibagikan di beberapa enum
  • Meningkatkan keterbacaan dan pemeliharaan dengan menggunakan nama deskriptif, bukan nilai misterius atau angka ajaib
  • Memfasilitasi proses debug dengan memanfaatkan nama yang dapat dibaca alih-alih nilai tanpa arti eksplisit
  • Memberikan satu sumber kebenaran dan konsistensi di seluruh kode

Sekarang setelah Anda mengetahui dasar-dasar pencacahan dalam pemrograman dan dengan Python, Anda dapat mulai membuat tipe enum Anda sendiri dengan menggunakan kelas

>>> from enum import Enum

>>> class Grade(Enum):
..     A = 90
..     B = 80
..     C = 70
..     D = 60
..     F = 0
...

>>> list(Grade)
[
    ,
    ,
    ,
    ,
    
]
2 Python

Hilangkan iklan

Membuat Pencacahan Dengan >>> from enum import Enum >>> class Grade(Enum): .. A = 90 .. B = 80 .. C = 70 .. D = 60 .. F = 0 ... >>> list(Grade) [ , , , , ] 2 Python

Modul

>>> from enum import Enum

>>> class Grade(Enum):
..     A = 90
..     B = 80
..     C = 70
..     D = 60
..     F = 0
...

>>> list(Grade)
[
    ,
    ,
    ,
    ,
    
]
1 Python menyediakan kelas
>>> from enum import Enum

>>> class Grade(Enum):
..     A = 90
..     B = 80
..     C = 70
..     D = 60
..     F = 0
...

>>> list(Grade)
[
    ,
    ,
    ,
    ,
    
]
2, yang memungkinkan Anda membuat tipe pencacahan. Untuk membuat pencacahan Anda sendiri, Anda dapat membuat subkelas
>>> from enum import Enum

>>> class Grade(Enum):
..     A = 90
..     B = 80
..     C = 70
..     D = 60
..     F = 0
...

>>> list(Grade)
[
    ,
    ,
    ,
    ,
    
]
2 atau menggunakan API fungsionalnya. Kedua opsi akan membiarkan Anda menentukan satu set konstanta terkait sebagai anggota enum

Di bagian berikut, Anda akan mempelajari cara membuat pencacahan dalam kode Anda menggunakan kelas

>>> from enum import Enum

>>> class Grade(Enum):
..     A = 90
..     B = 80
..     C = 70
..     D = 60
..     F = 0
...

>>> list(Grade)
[
    ,
    ,
    ,
    ,
    
]
2. Anda juga akan mempelajari cara menyetel nilai yang dihasilkan secara otomatis untuk enum Anda dan cara membuat enumerasi yang berisi alias dan nilai unik. Untuk memulai, Anda akan mulai dengan mempelajari cara membuat pencacahan dengan mensubklasifikasikan
>>> from enum import Enum

>>> class Grade(Enum):
..     A = 90
..     B = 80
..     C = 70
..     D = 60
..     F = 0
...

>>> list(Grade)
[
    ,
    ,
    ,
    ,
    
]
2

Membuat Enumerasi dengan Subclassing >>> from enum import Enum >>> class Grade(Enum): .. A = 90 .. B = 80 .. C = 70 .. D = 60 .. F = 0 ... >>> list(Grade) [ , , , , ] 2

Modul

>>> from enum import Enum

>>> class Grade(Enum):
..     A = 90
..     B = 80
..     C = 70
..     D = 60
..     F = 0
...

>>> list(Grade)
[
    ,
    ,
    ,
    ,
    
]
1 mendefinisikan tipe pencacahan tujuan umum dengan dan kemampuan. Anda bisa menggunakan tipe ini untuk membuat kumpulan konstanta bernama yang bisa Anda gunakan untuk mengganti literal tipe data umum, seperti angka dan string

Contoh klasik kapan Anda harus menggunakan pencacahan adalah ketika Anda perlu membuat satu set konstanta enumerasi yang mewakili hari dalam seminggu. Setiap hari akan memiliki nama simbolis dan nilai numerik antara

>>> from enum import Enum

>>> class SwitchPosition(Enum):
..     ON = True
..     OFF = False
...

>>> list(SwitchPosition)
[, ]

>>> class UserResponse(Enum):
..     YES = True
..     NO = False
...

>>> list(UserResponse)
[, ]
1 dan
>>> from enum import Enum

>>> class SwitchPosition(Enum):
..     ON = True
..     OFF = False
...

>>> list(SwitchPosition)
[, ]

>>> class UserResponse(Enum):
..     YES = True
..     NO = False
...

>>> list(UserResponse)
[, ]
2, inklusif

Inilah cara Anda membuat pencacahan ini dengan menggunakan

>>> from enum import Enum

>>> class Grade(Enum):
..     A = 90
..     B = 80
..     C = 70
..     D = 60
..     F = 0
...

>>> list(Grade)
[
    ,
    ,
    ,
    ,
    
]
2 sebagai superclass atau kelas induk Anda

>>>

>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
_

Kelas ________20______4 Anda adalah subkelas dari

>>> from enum import Enum

>>> class Grade(Enum):
..     A = 90
..     B = 80
..     C = 70
..     D = 60
..     F = 0
...

>>> list(Grade)
[
    ,
    ,
    ,
    ,
    
]
2. Jadi, Anda dapat memanggil
>>> from enum import Enum

>>> class SwitchPosition(Enum):
..     ON = True
..     OFF = False
...

>>> list(SwitchPosition)
[, ]

>>> class UserResponse(Enum):
..     YES = True
..     NO = False
...

>>> list(UserResponse)
[, ]
4 enumerasi, atau hanya enum.
>>> from enum import Enum

>>> class SwitchPosition(Enum):
..     ON = True
..     OFF = False
...

>>> list(SwitchPosition)
[, ]

>>> class UserResponse(Enum):
..     YES = True
..     NO = False
...

>>> list(UserResponse)
[, ]
7,
>>> from enum import Enum

>>> class SwitchPosition(Enum):
..     ON = True
..     OFF = False
...

>>> list(SwitchPosition)
[, ]

>>> class UserResponse(Enum):
..     YES = True
..     NO = False
...

>>> list(UserResponse)
[, ]
8, dan sejenisnya adalah anggota pencacahan, juga dikenal sebagai anggota enum, atau hanya anggota. Setiap anggota harus memiliki nilai, yang harus konstan

Karena anggota pencacahan harus berupa konstanta, Python tidak mengizinkan Anda menetapkan nilai baru ke anggota pencacahan saat runtime

>>>

>>> Day.MONDAY = 0
Traceback (most recent call last):
    ...
AttributeError: Cannot reassign members.

>>> Day


>>> # Rebind Day
>>> Day = "Monday"
>>> Day
'Monday'
_

Jika Anda mencoba mengubah nilai anggota enum, maka Anda mendapatkan

>>> from enum import Enum

>>> class SwitchPosition(Enum):
..     ON = True
..     OFF = False
...

>>> list(SwitchPosition)
[, ]

>>> class UserResponse(Enum):
..     YES = True
..     NO = False
...

>>> list(UserResponse)
[, ]
9. Tidak seperti nama anggota, nama yang berisi pencacahan itu sendiri bukanlah konstanta melainkan variabel. Jadi, mungkin untuk mengubah nama ini kapan saja selama eksekusi program Anda, tetapi Anda harus menghindari melakukan itu

Dalam contoh di atas, Anda telah menugaskan kembali

>>> from enum import Enum

>>> class SwitchPosition(Enum):
..     ON = True
..     OFF = False
...

>>> list(SwitchPosition)
[, ]

>>> class UserResponse(Enum):
..     YES = True
..     NO = False
...

>>> list(UserResponse)
[, ]
4, yang sekarang menyimpan string, bukan enumerasi asli. Dengan melakukan ini, Anda kehilangan referensi ke enum itu sendiri

Seringkali, nilai yang dipetakan ke anggota adalah bilangan bulat berurutan. Namun, mereka bisa dari jenis apa pun, termasuk jenis yang ditentukan pengguna. Dalam contoh ini, nilai

>>> from enum import Enum

>>> class SwitchPosition(Enum):
..     ON = True
..     OFF = False
...

>>> list(SwitchPosition)
[, ]

>>> class UserResponse(Enum):
..     YES = True
..     NO = False
...

>>> list(UserResponse)
[, ]
_7 adalah
>>> from enum import Enum

>>> class SwitchPosition(Enum):
..     ON = True
..     OFF = False
...

>>> list(SwitchPosition)
[, ]

>>> class UserResponse(Enum):
..     YES = True
..     NO = False
...

>>> list(UserResponse)
[, ]
1, nilai
>>> from enum import Enum

>>> class SwitchPosition(Enum):
..     ON = True
..     OFF = False
...

>>> list(SwitchPosition)
[, ]

>>> class UserResponse(Enum):
..     YES = True
..     NO = False
...

>>> list(UserResponse)
[, ]
8 adalah
>>> from enum import Enum

>>> class UserResponse(Enum):
..     YES = 1
..     NO = "No"
...

>>> UserResponse.NO


>>> UserResponse.YES

4, dan seterusnya

Catatan. Anda mungkin telah memperhatikan bahwa anggota ________20______4 dikapitalisasi. Inilah alasannya

Karena Enum digunakan untuk merepresentasikan konstanta, sebaiknya gunakan nama UPPER_CASE untuk anggota enum… ()

Anda dapat menganggap pencacahan sebagai kumpulan konstanta. Seperti daftar, tupel, atau kamus, pencacahan Python juga dapat diubah. Itu sebabnya Anda dapat menggunakan untuk mengubah pencacahan menjadi

>>> from enum import Enum

>>> class UserResponse(Enum):
..     YES = 1
..     NO = "No"
...

>>> UserResponse.NO


>>> UserResponse.YES

7 anggota pencacahan

Anggota enumerasi Python adalah turunan dari enumerasi kontainer itu sendiri

>>>_______ 38 ________

>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> type(Day.MONDAY)


>>> type(Day.TUESDAY)

Anda tidak boleh mengacaukan kelas enum khusus seperti

>>> from enum import Enum

>>> class SwitchPosition(Enum):
..     ON = True
..     OFF = False
...

>>> list(SwitchPosition)
[, ]

>>> class UserResponse(Enum):
..     YES = True
..     NO = False
...

>>> list(UserResponse)
[, ]
4 dengan anggotanya.
>>> from enum import Enum

>>> class SwitchPosition(Enum):
..     ON = True
..     OFF = False
...

>>> list(SwitchPosition)
[, ]

>>> class UserResponse(Enum):
..     YES = True
..     NO = False
...

>>> list(UserResponse)
[, ]
7,
>>> from enum import Enum

>>> class SwitchPosition(Enum):
..     ON = True
..     OFF = False
...

>>> list(SwitchPosition)
[, ]

>>> class UserResponse(Enum):
..     YES = True
..     NO = False
...

>>> list(UserResponse)
[, ]
8, dan seterusnya. Dalam contoh ini, tipe enum
>>> from enum import Enum

>>> class SwitchPosition(Enum):
..     ON = True
..     OFF = False
...

>>> list(SwitchPosition)
[, ]

>>> class UserResponse(Enum):
..     YES = True
..     NO = False
...

>>> list(UserResponse)
[, ]
_4 adalah hub untuk anggota enumerasi, yang kebetulan bertipe
>>> from enum import Enum

>>> class SwitchPosition(Enum):
..     ON = True
..     OFF = False
...

>>> list(SwitchPosition)
[, ]

>>> class UserResponse(Enum):
..     YES = True
..     NO = False
...

>>> list(UserResponse)
[, ]
4

Anda juga dapat menggunakan idiom berdasarkan

>>> from enum import Enum

>>> class Empty(Enum):
..     pass
...

>>> list(Empty)
[]

>>> class Empty(Enum):
..     ...
...

>>> list(Empty)
[]

>>> class Empty(Enum):
..     """Empty enumeration for such and such purposes."""
...

>>> list(Empty)
[]
3 untuk membuat enumerasi

>>>

>>> from enum import Enum

>>> class Season(Enum):
..     WINTER, SPRING, SUMMER, FALL = range(1, 5)
...

>>> list(Season)
[
    ,
    ,
    ,
    
]
_

Dalam contoh ini, Anda menggunakan

>>> from enum import Enum

>>> class Empty(Enum):
..     pass
...

>>> list(Empty)
[]

>>> class Empty(Enum):
..     ...
...

>>> list(Empty)
[]

>>> class Empty(Enum):
..     """Empty enumeration for such and such purposes."""
...

>>> list(Empty)
[]
_3 dengan offset
>>> from enum import Enum

>>> class Empty(Enum):
..     pass
...

>>> list(Empty)
[]

>>> class Empty(Enum):
..     ...
...

>>> list(Empty)
[]

>>> class Empty(Enum):
..     """Empty enumeration for such and such purposes."""
...

>>> list(Empty)
[]
5 dan
>>> from enum import Enum

>>> class Empty(Enum):
..     pass
...

>>> list(Empty)
[]

>>> class Empty(Enum):
..     ...
...

>>> list(Empty)
[]

>>> class Empty(Enum):
..     """Empty enumeration for such and such purposes."""
...

>>> list(Empty)
[]
6. Offset
>>> from enum import Enum

>>> class Empty(Enum):
..     pass
...

>>> list(Empty)
[]

>>> class Empty(Enum):
..     ...
...

>>> list(Empty)
[]

>>> class Empty(Enum):
..     """Empty enumeration for such and such purposes."""
...

>>> list(Empty)
[]
_5 memungkinkan Anda untuk memberikan angka yang memulai rentang, sementara offset
>>> from enum import Enum

>>> class Grade(Enum):
..     A = 90
..     B = 80
..     C = 70
..     D = 60
..     F = 0
...

>>> list(Grade)
[
    ,
    ,
    ,
    ,
    
]
6 menentukan angka di mana rentang akan berhenti menghasilkan angka

Meskipun Anda menggunakan sintaks

>>> from enum import Enum

>>> class Empty(Enum):
..     pass
...

>>> list(Empty)
[]

>>> class Empty(Enum):
..     ...
...

>>> list(Empty)
[]

>>> class Empty(Enum):
..     """Empty enumeration for such and such purposes."""
...

>>> list(Empty)
[]
_9 untuk membuat pencacahan, itu adalah kelas khusus yang berbeda dari kelas Python normal. Tidak seperti kelas reguler, enum

  • Tidak bisa
  • Tidak bisa kecuali basis enum tidak memiliki anggota
  • Berikan yang dapat dibaca manusia untuk anggotanya
  • Apakah , mengembalikan anggotanya secara berurutan
  • Berikan anggota hashable yang dapat digunakan sebagai
  • Mendukung sintaks braket persegi, sintaks, dan notasi titik untuk mengakses anggota
  • Jangan izinkan anggota

Anda harus mengingat semua perbedaan halus ini ketika Anda mulai membuat dan bekerja dengan pencacahan Anda sendiri dengan Python

Seringkali, anggota pencacahan mengambil nilai bilangan bulat berurutan. Namun, dalam Python, nilai anggota bisa bertipe apa saja, termasuk tipe yang ditentukan pengguna. Sebagai contoh, inilah pencacahan nilai sekolah yang menggunakan nilai numerik tidak berurutan dalam urutan menurun

>>>

>>> from enum import Enum

>>> class Grade(Enum):
..     A = 90
..     B = 80
..     C = 70
..     D = 60
..     F = 0
...

>>> list(Grade)
[
    ,
    ,
    ,
    ,
    
]
_

Contoh ini menunjukkan bahwa enum Python cukup fleksibel dan memungkinkan Anda menggunakan nilai yang berarti untuk anggotanya. Anda dapat mengatur nilai anggota sesuai dengan maksud kode Anda

Anda juga dapat menggunakan nilai string untuk anggota pencacahan Anda. Berikut adalah contoh pencacahan

>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
00 yang dapat Anda gunakan di toko online

>>>

>>> from enum import Enum

>>> class Size(Enum):
..     S = "small"
..     M = "medium"
..     L = "large"
..     XL = "extra large"
...

>>> list(Size)
[
    ,
    ,
    ,
    
]
_

Dalam contoh ini, nilai yang terkait dengan setiap ukuran berisi deskripsi yang dapat membantu Anda dan pengembang lain memahami arti kode Anda

Anda juga dapat membuat pencacahan nilai Boolean. Dalam hal ini, anggota pencacahan Anda hanya akan memiliki dua nilai

>>>

>>> from enum import Enum

>>> class SwitchPosition(Enum):
..     ON = True
..     OFF = False
...

>>> list(SwitchPosition)
[, ]

>>> class UserResponse(Enum):
..     YES = True
..     NO = False
...

>>> list(UserResponse)
[, ]
_

Kedua contoh ini menunjukkan bagaimana Anda dapat menggunakan pencacahan untuk menambahkan konteks tambahan ke kode Anda. Pada contoh pertama, siapa pun yang membaca kode Anda akan mengetahui bahwa kode tersebut mengemulasi objek sakelar dengan dua kemungkinan status. Informasi tambahan ini sangat meningkatkan keterbacaan kode Anda

Anda juga dapat menentukan pencacahan dengan nilai heterogen

>>>

>>> from enum import Enum

>>> class UserResponse(Enum):
..     YES = 1
..     NO = "No"
...

>>> UserResponse.NO


>>> UserResponse.YES

_

Namun, praktik ini membuat kode Anda tidak konsisten dari perspektif keamanan jenis. Oleh karena itu, itu tidak dianjurkan praktek. Idealnya, ini akan membantu jika Anda memiliki nilai dari tipe data yang sama, yang konsisten dengan gagasan mengelompokkan konstanta terkait yang serupa dalam pencacahan

Terakhir, Anda juga dapat membuat pencacahan kosong

>>>

>>> from enum import Enum

>>> class Empty(Enum):
..     pass
...

>>> list(Empty)
[]

>>> class Empty(Enum):
..     ...
...

>>> list(Empty)
[]

>>> class Empty(Enum):
..     """Empty enumeration for such and such purposes."""
...

>>> list(Empty)
[]
_

Dalam contoh ini,

>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
_01 mewakili pencacahan kosong karena tidak mendefinisikan konstanta anggota apa pun. Perhatikan bahwa Anda dapat menggunakan pernyataan
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
_02,
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
03 literal (
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
04), atau tingkat kelas untuk membuat pencacahan kosong. Pendekatan terakhir ini dapat membantu Anda meningkatkan keterbacaan kode Anda dengan memberikan konteks ekstra dalam docstring

Sekarang, mengapa Anda perlu mendefinisikan pencacahan kosong?

Perhatikan contoh berikut

>>>

>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
0

Dalam contoh ini, Anda membuat

>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
_05 sebagai pencacahan tanpa anggota. Anda hanya dapat mensubklasifikasikan pencacahan khusus jika tidak memiliki anggota, jadi
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
05 memenuhi syarat. Kelas
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
_07 mewarisi dari pencacahan kosong Anda, yang berarti Anda dapat mengakses metode
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
08. Metode ini mengubah nilai anggota yang diberikan ke dalam daftar

Hilangkan iklan

Membuat Pencacahan Dengan API Fungsional

Kelas

>>> from enum import Enum

>>> class Grade(Enum):
..     A = 90
..     B = 80
..     C = 70
..     D = 60
..     F = 0
...

>>> list(Grade)
[
    ,
    ,
    ,
    ,
    
]
2 menyediakan a yang dapat Anda gunakan untuk membuat pencacahan tanpa menggunakan sintaks kelas biasa. Anda hanya perlu memanggil
>>> from enum import Enum

>>> class Grade(Enum):
..     A = 90
..     B = 80
..     C = 70
..     D = 60
..     F = 0
...

>>> list(Grade)
[
    ,
    ,
    ,
    ,
    
]
_2 dengan argumen yang sesuai seperti yang akan Anda lakukan dengan fungsi atau callable lainnya

API fungsional ini menyerupai cara kerja fungsi pabrik

>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
11. Dalam kasus
>>> from enum import Enum

>>> class Grade(Enum):
..     A = 90
..     B = 80
..     C = 70
..     D = 60
..     F = 0
...

>>> list(Grade)
[
    ,
    ,
    ,
    ,
    
]
2, tanda tangan fungsional memiliki bentuk sebagai berikut

>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
_1

Dari tanda tangan ini, Anda dapat menyimpulkan bahwa

>>> from enum import Enum

>>> class Grade(Enum):
..     A = 90
..     B = 80
..     C = 70
..     D = 60
..     F = 0
...

>>> list(Grade)
[
    ,
    ,
    ,
    ,
    
]
2 membutuhkan dua argumen,
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
14 dan
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
15. Itu juga bisa memakan waktu hingga empat opsional dan argumen. Argumen ini adalah
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
16,
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
17,
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
18, dan
>>> from enum import Enum

>>> class Empty(Enum):
..     pass
...

>>> list(Empty)
[]

>>> class Empty(Enum):
..     ...
...

>>> list(Empty)
[]

>>> class Empty(Enum):
..     """Empty enumeration for such and such purposes."""
...

>>> list(Empty)
[]
5

Berikut adalah tabel yang merangkum isi dan makna dari setiap argumen dalam tanda tangan

>>> from enum import Enum

>>> class Grade(Enum):
..     A = 90
..     B = 80
..     C = 70
..     D = 60
..     F = 0
...

>>> list(Grade)
[
    ,
    ,
    ,
    ,
    
]
2

ArgumentDescriptionrequired

>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
14 Memegang string dengan nama enumeration baru Classyes
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
15 Menyampaikan Nama untuk enumeration Anggota
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
16 -name dari Module yang Definisikan KOLAGETION -KOLAGE KOLAGE, KOLAMAN ENOMERSI, KOLEKSI, KOLEGION ENOMERGION, KOLEGION ENOMERSI, KOLEGION ENOMERSI, KOLEKSION ENOMERSI, KOLEKSION ENOMERSI, KOLEKSION ENOMERSI,

Untuk memberikan argumen

>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
15, Anda dapat menggunakan objek berikut

  • String berisi nama anggota yang dipisahkan dengan spasi atau koma
  • Iterable dari nama anggota
  • Iterable dari pasangan nama-nilai

Argumen

>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
_16 dan
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
17 memainkan peran penting ketika Anda perlu mengasinkan dan menghapus pencacahan Anda. Jika
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
_16 tidak disetel, maka Python akan berusaha menemukan modulnya. Jika gagal, maka kelas tidak akan dapat dipilih. Demikian pula, jika
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
17 tidak disetel, maka Python akan menyetelnya ke , yang dapat menyebabkan pencacahan Anda gagal membongkar dalam beberapa situasi

Argumen

>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
_18 diperlukan saat Anda ingin menyediakan kelas mixin untuk pencacahan Anda. Menggunakan kelas mixin dapat menyediakan fungsi baru untuk enum kustom Anda, seperti kemampuan perbandingan yang diperluas, seperti yang akan Anda pelajari di bagian tentang

Terakhir, argumen

>>> from enum import Enum

>>> class Empty(Enum):
..     pass
...

>>> list(Empty)
[]

>>> class Empty(Enum):
..     ...
...

>>> list(Empty)
[]

>>> class Empty(Enum):
..     """Empty enumeration for such and such purposes."""
...

>>> list(Empty)
[]
5 menyediakan cara untuk menyesuaikan nilai awal pencacahan Anda. Argumen ini default ke
>>> from enum import Enum

>>> class SwitchPosition(Enum):
..     ON = True
..     OFF = False
...

>>> list(SwitchPosition)
[, ]

>>> class UserResponse(Enum):
..     YES = True
..     NO = False
...

>>> list(UserResponse)
[, ]
_1 bukan ke
>>> from enum import Enum

>>> class Size(Enum):
..     S = "small"
..     M = "medium"
..     L = "large"
..     XL = "extra large"
...

>>> list(Size)
[
    ,
    ,
    ,
    
]
0. Alasan untuk nilai default ini adalah bahwa
>>> from enum import Enum

>>> class Size(Enum):
..     S = "small"
..     M = "medium"
..     L = "large"
..     XL = "extra large"
...

>>> list(Size)
[
    ,
    ,
    ,
    
]
_0 salah dalam pengertian Boolean, tetapi anggota enum mengevaluasi ke
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
37. Oleh karena itu, mulai dari
>>> from enum import Enum

>>> class Size(Enum):
..     S = "small"
..     M = "medium"
..     L = "large"
..     XL = "extra large"
...

>>> list(Size)
[
    ,
    ,
    ,
    
]
_0 akan tampak mengejutkan dan membingungkan

Sering kali, Anda hanya akan menggunakan dua argumen pertama untuk

>>> from enum import Enum

>>> class Grade(Enum):
..     A = 90
..     B = 80
..     C = 70
..     D = 60
..     F = 0
...

>>> list(Grade)
[
    ,
    ,
    ,
    ,
    
]
2 saat membuat enumerasi. Berikut adalah contoh membuat pencacahan umum

>>>

>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
2

Panggilan ke

>>> from enum import Enum

>>> class Grade(Enum):
..     A = 90
..     B = 80
..     C = 70
..     D = 60
..     F = 0
...

>>> list(Grade)
[
    ,
    ,
    ,
    ,
    
]
2 ini mengembalikan pencacahan baru yang disebut
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
_41. Untuk memberikan nama anggota, Anda menggunakan daftar string. Setiap string mewakili metode HTTP. Perhatikan bahwa nilai anggota secara otomatis disetel ke bilangan bulat berurutan mulai dari
>>> from enum import Enum

>>> class SwitchPosition(Enum):
..     ON = True
..     OFF = False
...

>>> list(SwitchPosition)
[, ]

>>> class UserResponse(Enum):
..     YES = True
..     NO = False
...

>>> list(UserResponse)
[, ]
1. Anda dapat mengubah nilai awal ini menggunakan argumen
>>> from enum import Enum

>>> class Empty(Enum):
..     pass
...

>>> list(Empty)
[]

>>> class Empty(Enum):
..     ...
...

>>> list(Empty)
[]

>>> class Empty(Enum):
..     """Empty enumeration for such and such purposes."""
...

>>> list(Empty)
[]
5

Perhatikan bahwa mendefinisikan pencacahan di atas dengan sintaks kelas akan menghasilkan hasil yang sama

>>>

>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
3

Di sini, Anda menggunakan sintaks kelas untuk mendefinisikan enum ________23______41. Contoh ini sepenuhnya setara dengan yang sebelumnya, seperti yang dapat Anda simpulkan dari output

>>> from enum import Enum

>>> class UserResponse(Enum):
..     YES = 1
..     NO = "No"
...

>>> UserResponse.NO


>>> UserResponse.YES

6

Menggunakan sintaks kelas atau API fungsional untuk membuat pencacahan Anda adalah keputusan Anda dan sebagian besar akan bergantung pada selera dan kondisi konkret Anda. Namun, jika Anda ingin membuat pencacahan secara dinamis, API fungsional bisa menjadi satu-satunya pilihan Anda

Pertimbangkan contoh berikut, di mana Anda membuat enum dengan anggota yang disediakan pengguna

>>>

>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
4

Contoh ini sedikit ekstrim karena membuat objek apa pun dari masukan pengguna Anda adalah praktik yang cukup berisiko, mengingat Anda tidak dapat memprediksi apa yang akan dimasukkan pengguna. Namun, contoh ini dimaksudkan untuk menunjukkan bahwa API fungsional adalah cara yang tepat ketika Anda perlu membuat pencacahan secara dinamis

Terakhir, jika Anda perlu menyetel nilai khusus untuk anggota enum Anda, maka Anda dapat menggunakan iterable pasangan nama-nilai sebagai argumen

>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
15 Anda. Dalam contoh di bawah ini, Anda menggunakan daftar tupel nama-nilai untuk menginisialisasi semua anggota pencacahan

>>>

>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
5

Memberikan daftar tuple nama-nilai seperti yang Anda lakukan di atas memungkinkan untuk membuat pencacahan

>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
47 dengan nilai khusus untuk anggota. Dalam contoh ini, jika Anda tidak ingin menggunakan daftar tuple nama-nilai, Anda juga bisa menggunakan kamus yang memetakan nama ke nilai

Hilangkan iklan

Membangun Enumerasi Dari Nilai Otomatis

Modul

>>> from enum import Enum

>>> class Grade(Enum):
..     A = 90
..     B = 80
..     C = 70
..     D = 60
..     F = 0
...

>>> list(Grade)
[
    ,
    ,
    ,
    ,
    
]
1 Python menyediakan fungsi praktis yang disebut yang memungkinkan Anda menetapkan nilai otomatis untuk anggota enum Anda. Perilaku default fungsi ini adalah menetapkan nilai bilangan bulat berurutan ke anggota

Inilah cara

>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
_49 bekerja

>>>

>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
6

Anda perlu menelepon

>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
_49 satu kali untuk setiap nilai otomatis yang Anda perlukan. Anda juga dapat menggabungkan
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
_49 dengan nilai konkret, seperti yang Anda lakukan dengan
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
53 dan
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
54 dalam contoh ini

Secara default,

>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
_49 menetapkan nomor bilangan bulat berurutan untuk setiap anggota target mulai dari
>>> from enum import Enum

>>> class SwitchPosition(Enum):
..     ON = True
..     OFF = False
...

>>> list(SwitchPosition)
[, ]

>>> class UserResponse(Enum):
..     YES = True
..     NO = False
...

>>> list(UserResponse)
[, ]
1. Anda dapat men-tweak perilaku default ini dengan mengganti metode, yang
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
49 digunakan di bawah tenda untuk menghasilkan nilai otomatis

Berikut ini contoh cara melakukannya

>>>

>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
7

Dalam contoh ini, Anda membuat pencacahan arah mata angin Bumi di mana nilainya secara otomatis diatur ke string yang berisi karakter pertama dari setiap nama anggota. Perhatikan bahwa Anda harus memberikan versi

>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
57 yang diganti sebelum menentukan anggota mana pun. Itu karena anggota akan dibangun dengan memanggil metode

Membuat Pencacahan Dengan Alias ​​​​dan Nilai Unik

Anda dapat membuat pencacahan di mana dua atau lebih anggota memiliki nilai konstanta yang sama. Anggota redundan dikenal sebagai alias dan dapat berguna dalam beberapa situasi. Misalnya, Anda memiliki enum yang berisi kumpulan sistem operasi (OS), seperti dalam kode berikut

>>> ________23______8

Distribusi Linux dianggap sebagai sistem operasi independen. Jadi, Ubuntu dan Debian keduanya adalah sistem independen dengan tujuan dan target audiens yang berbeda. Namun, mereka berbagi kernel umum yang disebut Linux

Pencacahan di atas memetakan sistem operasi ke kernel yang sesuai. Hubungan ini mengubah

>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
60 menjadi alias
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
61, yang mungkin berguna ketika Anda memiliki kode yang terkait dengan kernel bersama dengan kode yang khusus untuk distribusi Linux tertentu

Bagian penting dari perilaku yang perlu diperhatikan dalam contoh di atas adalah ketika Anda mengulangi pencacahan secara langsung, alias tidak dianggap. Jika Anda perlu mengulangi semua anggota, termasuk alias, maka Anda perlu menggunakan

>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
62. Anda akan mempelajari lebih lanjut tentang iterasi dan atribut
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
62 di bagian tentang

Anda juga memiliki opsi untuk sepenuhnya melarang alias dalam pencacahan Anda. Untuk melakukan ini, Anda dapat menggunakan dekorator dari modul

>>> from enum import Enum

>>> class Grade(Enum):
..     A = 90
..     B = 80
..     C = 70
..     D = 60
..     F = 0
...

>>> list(Grade)
[
    ,
    ,
    ,
    ,
    
]
1

>>>

>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
9

Dalam contoh ini, Anda menghias

>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
_66 dengan
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
64. Jika ada nilai anggota yang digandakan, maka Anda mendapatkan
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
68. Di sini, pesan pengecualian menunjukkan bahwa
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
_60 dan
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
61 berbagi nilai yang sama, yang tidak diperbolehkan

Bekerja Dengan Pencacahan dengan Python

Hingga saat ini, Anda telah mempelajari apa itu enumerasi, kapan menggunakannya, dan manfaat apa yang Anda dapatkan dari menggunakannya dalam kode Anda. Anda juga mempelajari cara membuat enumerasi dengan Python menggunakan kelas

>>> from enum import Enum

>>> class Grade(Enum):
..     A = 90
..     B = 80
..     C = 70
..     D = 60
..     F = 0
...

>>> list(Grade)
[
    ,
    ,
    ,
    ,
    
]
2 sebagai superclass atau sebagai callable

Sekarang saatnya bagi Anda untuk mulai menggali cara kerja enumerasi Python dan bagaimana Anda dapat menggunakannya dalam kode Anda

Hilangkan iklan

Mengakses Anggota Pencacahan

Saat menggunakan pencacahan dalam kode Anda, mengakses anggotanya adalah operasi mendasar yang harus dilakukan. Anda akan memiliki tiga cara berbeda untuk mengakses anggota enumerasi dengan Python

Misalnya, Anda perlu mengakses

>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
72 anggota dari
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
73 enum di bawah. Dalam situasi ini, Anda dapat melakukan sesuatu seperti ini

>>>

>>> Day.MONDAY = 0
Traceback (most recent call last):
    ...
AttributeError: Cannot reassign members.

>>> Day


>>> # Rebind Day
>>> Day = "Monday"
>>> Day
'Monday'
0

Baris pertama yang disorot dalam contoh ini menunjukkan bagaimana Anda dapat mengakses anggota enum menggunakan notasi titik, yang cukup intuitif dan mudah dibaca. Baris kedua yang disorot mengakses anggota target dengan memanggil pencacahan dengan nilai anggota sebagai argumen

Catatan. Penting untuk dicatat bahwa memanggil pencacahan dengan nilai anggota sebagai argumen dapat membuat Anda merasa seperti sedang membuat contoh pencacahan. Namun, pencacahan tidak dapat dipakai, seperti yang sudah Anda ketahui

>>>

>>> Day.MONDAY = 0
Traceback (most recent call last):
    ...
AttributeError: Cannot reassign members.

>>> Day


>>> # Rebind Day
>>> Day = "Monday"
>>> Day
'Monday'
1

Mencoba membuat instance dari pencacahan yang ada tidak diperbolehkan, jadi Anda mendapatkan

>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
74 jika Anda mencoba melakukannya. Oleh karena itu, Anda tidak boleh bingung membuat contoh dengan mengakses anggota melalui panggilan pencacahan

Terakhir, baris ketiga yang disorot menunjukkan bagaimana Anda dapat menggunakan notasi seperti kamus atau notasi subskrip untuk mengakses anggota menggunakan nama anggota sebagai kunci target

Pencacahan Python menawarkan fleksibilitas yang besar bagi Anda untuk mengakses anggota. Notasi titik bisa dibilang merupakan pendekatan yang paling umum digunakan dalam kode Python. Namun, dua pendekatan lainnya juga dapat membantu. Jadi, gunakan notasi yang memenuhi kebutuhan, konvensi, dan gaya spesifik Anda

Menggunakan Atribut >>> from enum import Enum >>> class Day(Enum): .. MONDAY = 1 .. TUESDAY = 2 .. WEDNESDAY = 3 .. THURSDAY = 4 .. FRIDAY = 5 .. SATURDAY = 6 .. SUNDAY = 7 ... >>> list(Day) [ , , , , , , ] 75 dan ________23______76

Anggota enumerasi Python adalah turunan dari kelas yang memuatnya. Selama parsing kelas enum, setiap anggota secara otomatis diberikan atribut

>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
75 yang menyimpan nama anggota sebagai string. Anggota juga mendapatkan atribut
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
_76 yang menyimpan nilai yang diberikan kepada anggota itu sendiri dalam definisi kelas

Anda dapat mengakses

>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
75 dan ________23______76 seperti yang Anda lakukan dengan atribut biasa, menggunakan notasi titik. Perhatikan contoh berikut, yang mensimulasikan semafor, yang lebih dikenal sebagai lampu lalu lintas

>>>

>>> Day.MONDAY = 0
Traceback (most recent call last):
    ...
AttributeError: Cannot reassign members.

>>> Day


>>> # Rebind Day
>>> Day = "Monday"
>>> Day
'Monday'
2

Atribut

>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
_75 dan
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
76 dari anggota enum memberi Anda akses langsung ke nama anggota sebagai string dan nilai anggota, masing-masing. Atribut ini berguna saat Anda melakukan iterasi melalui enumerasi, yang akan Anda jelajahi di bagian selanjutnya

Iterasi Melalui Pencacahan

Fitur luar biasa dari enumerasi Python dibandingkan dengan kelas reguler adalah bahwa enumerasi dapat diulang secara default. Karena iterable, Anda dapat menggunakannya dalam

>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
83 loop dan dengan alat lain yang menerima dan memproses iterables

Pencacahan Python mendukung iterasi langsung atas anggota dalam urutan definisi

>>>

>>> Day.MONDAY = 0
Traceback (most recent call last):
    ...
AttributeError: Cannot reassign members.

>>> Day


>>> # Rebind Day
>>> Day = "Monday"
>>> Day
'Monday'
3

Dalam contoh ini, Anda menggunakan

>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
_83 loop untuk mengulangi anggota
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
85. Perhatikan bahwa anggota diproduksi dalam urutan yang sama seperti yang didefinisikan dalam definisi kelas

Saat Anda mengulang enumerasi, Anda dapat mengakses atribut ________23______75 dan

>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
76 saat Anda menggunakannya

>>>

>>> Day.MONDAY = 0
Traceback (most recent call last):
    ...
AttributeError: Cannot reassign members.

>>> Day


>>> # Rebind Day
>>> Day = "Monday"
>>> Day
'Monday'
4

Teknik iterasi semacam ini terlihat sangat mirip dengan iterasi pada kamus. Jadi, jika Anda sudah terbiasa dengan iterasi kamus, mengulang enumerasi menggunakan teknik ini akan menjadi tugas yang mudah dengan banyak kasus penggunaan potensial

Atau, pencacahan memiliki atribut khusus yang disebut

>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
62 yang juga dapat Anda gunakan untuk mengulangi anggotanya. Atribut ini menyimpan kamus yang memetakan nama ke anggota. Perbedaan antara iterasi kamus ini dan enumerasi secara langsung adalah bahwa kamus memberi Anda akses ke semua anggota enumerasi, termasuk semua alias yang mungkin Anda miliki

Berikut adalah beberapa contoh penggunaan

>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
_62 untuk beralih melalui pencacahan
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
85 Anda

>>>

>>> Day.MONDAY = 0
Traceback (most recent call last):
    ...
AttributeError: Cannot reassign members.

>>> Day


>>> # Rebind Day
>>> Day = "Monday"
>>> Day
'Monday'
5

Anda dapat menggunakan atribut khusus

>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
_62 untuk akses terprogram terperinci ke anggota enumerasi Python. Karena
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
_62 memegang kamus biasa, Anda dapat menggunakan semua teknik iterasi yang berlaku untuk tipe data bawaan ini. Beberapa teknik ini termasuk menggunakan metode kamus seperti , , dan

Hilangkan iklan

Menggunakan Enumerasi dalam >>> from enum import Enum >>> class Day(Enum): .. MONDAY = 1 .. TUESDAY = 2 .. WEDNESDAY = 3 .. THURSDAY = 4 .. FRIDAY = 5 .. SATURDAY = 6 .. SUNDAY = 7 ... >>> list(Day) [ , , , , , , ] _96 dan >>> from enum import Enum >>> class Day(Enum): .. MONDAY = 1 .. TUESDAY = 2 .. WEDNESDAY = 3 .. THURSDAY = 4 .. FRIDAY = 5 .. SATURDAY = 6 .. SUNDAY = 7 ... >>> list(Day) [ , , , , , , ] 97 Pernyataan

Pernyataan berantai dan pernyataan yang relatif baru adalah tempat umum dan alami di mana Anda dapat menggunakan enumerasi. Kedua konstruksi memungkinkan Anda untuk mengambil tindakan yang berbeda tergantung pada kondisi tertentu

Misalnya, Anda memiliki sepotong kode yang menangani semafor, atau lampu lalu lintas, dalam aplikasi kontrol lalu lintas. Anda harus melakukan tindakan berbeda tergantung pada cahaya semaphore saat ini. Dalam situasi ini, Anda dapat menggunakan pencacahan untuk merepresentasikan semaphore dan lampunya. Kemudian Anda dapat menggunakan rangkaian

>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
_96 …
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
99 pernyataan untuk memutuskan tindakan yang akan dijalankan

>>>

>>> Day.MONDAY = 0
Traceback (most recent call last):
    ...
AttributeError: Cannot reassign members.

>>> Day


>>> # Rebind Day
>>> Day = "Monday"
>>> Day
'Monday'
6

Rantai

>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
96 …
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
99 pernyataan dalam fungsi
>>> Day.MONDAY = 0
Traceback (most recent call last):
    ...
AttributeError: Cannot reassign members.

>>> Day


>>> # Rebind Day
>>> Day = "Monday"
>>> Day
'Monday'
06 Anda memeriksa nilai lampu saat ini untuk memutuskan tindakan yang akan diambil. Perhatikan bahwa panggilan ke
>>> Day.MONDAY = 0
Traceback (most recent call last):
    ...
AttributeError: Cannot reassign members.

>>> Day


>>> # Rebind Day
>>> Day = "Monday"
>>> Day
'Monday'
_07 di
>>> Day.MONDAY = 0
Traceback (most recent call last):
    ...
AttributeError: Cannot reassign members.

>>> Day


>>> # Rebind Day
>>> Day = "Monday"
>>> Day
'Monday'
06 hanyalah placeholder. Dalam kode nyata, Anda akan menggantinya dengan operasi yang lebih kompleks

Jika Anda menggunakan Python 3. 10 atau lebih besar, maka Anda dapat dengan cepat mengubah rantai

>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
96 …
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
99 pernyataan di atas menjadi pernyataan
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
97 …
>>> Day.MONDAY = 0
Traceback (most recent call last):
    ...
AttributeError: Cannot reassign members.

>>> Day


>>> # Rebind Day
>>> Day = "Monday"
>>> Day
'Monday'
01 yang setara

>>>

>>> Day.MONDAY = 0
Traceback (most recent call last):
    ...
AttributeError: Cannot reassign members.

>>> Day


>>> # Rebind Day
>>> Day = "Monday"
>>> Day
'Monday'
7

Implementasi baru

>>> Day.MONDAY = 0
Traceback (most recent call last):
    ...
AttributeError: Cannot reassign members.

>>> Day


>>> # Rebind Day
>>> Day = "Monday"
>>> Day
'Monday'
06 ini setara dengan implementasi sebelumnya yang menggunakan pernyataan
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
96 …
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
99. Menggunakan salah satu teknik adalah masalah selera dan gaya. Kedua teknik bekerja dengan baik dan sebanding dalam hal keterbacaan. Namun, perhatikan bahwa jika Anda perlu menjamin kompatibilitas mundur dengan versi Python yang lebih rendah dari 3. 10, maka Anda harus menggunakan pernyataan berantai ________23______96 … ________23______99

Akhirnya, perhatikan bahwa meskipun pencacahan tampaknya cocok dengan pernyataan

>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
96 …
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
99 dan
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
97 …
>>> Day.MONDAY = 0
Traceback (most recent call last):
    ...
AttributeError: Cannot reassign members.

>>> Day


>>> # Rebind Day
>>> Day = "Monday"
>>> Day
'Monday'
01, Anda harus ingat bahwa pernyataan ini tidak berskala dengan baik. Jika Anda menambahkan anggota baru ke pencacahan target Anda, Anda harus memperbarui fungsi penanganan untuk mempertimbangkan anggota baru ini

Membandingkan Pencacahan

Mampu menggunakan pencacahan pada pernyataan

>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
96 …
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
99 dan pernyataan
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
97 …
>>> Day.MONDAY = 0
Traceback (most recent call last):
    ...
AttributeError: Cannot reassign members.

>>> Day


>>> # Rebind Day
>>> Day = "Monday"
>>> Day
'Monday'
01 pernyataan menunjukkan bahwa anggota pencacahan dapat diperbandingkan. Secara default, enum mendukung dua jenis operator pembanding

  1. Identitas, menggunakan operator and
  2. Kesetaraan, menggunakan operator
    >>> Day.MONDAY = 0
    Traceback (most recent call last):
        ...
    AttributeError: Cannot reassign members.
    
    >>> Day
    
    
    >>> # Rebind Day
    >>> Day = "Monday"
    >>> Day
    'Monday'
    
    _28 dan ________29______29

Perbandingan identitas bergantung pada fakta bahwa setiap anggota enum adalah turunan tunggal dari kelas pencacahannya. Karakteristik ini memungkinkan perbandingan identitas anggota yang cepat dan murah menggunakan operator

>>> Day.MONDAY = 0
Traceback (most recent call last):
    ...
AttributeError: Cannot reassign members.

>>> Day


>>> # Rebind Day
>>> Day = "Monday"
>>> Day
'Monday'
26 dan
>>> Day.MONDAY = 0
Traceback (most recent call last):
    ...
AttributeError: Cannot reassign members.

>>> Day


>>> # Rebind Day
>>> Day = "Monday"
>>> Day
'Monday'
27

Pertimbangkan contoh berikut, yang membandingkan kombinasi berbeda dari anggota enum

>>> ________29______8

Setiap anggota enum memiliki identitasnya masing-masing, yang berbeda dengan identitas anggota saudaranya. Aturan ini tidak berlaku untuk alias anggota, karena hanya merujuk ke anggota yang sudah ada dan memiliki identitas yang sama. Inilah sebabnya mengapa membandingkan

>>> Day.MONDAY = 0
Traceback (most recent call last):
    ...
AttributeError: Cannot reassign members.

>>> Day


>>> # Rebind Day
>>> Day = "Monday"
>>> Day
'Monday'
32 dan
>>> Day.MONDAY = 0
Traceback (most recent call last):
    ...
AttributeError: Cannot reassign members.

>>> Day


>>> # Rebind Day
>>> Day = "Monday"
>>> Day
'Monday'
33 mengembalikan
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
37 dalam contoh terakhir Anda

Catatan. Untuk mendapatkan identitas objek tertentu dengan Python, Anda bisa menggunakan fungsi bawaan dengan objek sebagai argumen

Pemeriksaan identitas antar anggota enumerasi yang berbeda selalu menghasilkan

>>> Day.MONDAY = 0
Traceback (most recent call last):
    ...
AttributeError: Cannot reassign members.

>>> Day


>>> # Rebind Day
>>> Day = "Monday"
>>> Day
'Monday'
36

>>>

>>> Day.MONDAY = 0
Traceback (most recent call last):
    ...
AttributeError: Cannot reassign members.

>>> Day


>>> # Rebind Day
>>> Day = "Monday"
>>> Day
'Monday'
9

Alasan untuk hasil yang salah ini adalah bahwa anggota enum yang berbeda adalah contoh independen dengan identitas mereka sendiri, jadi setiap pemeriksaan identitas pada mereka mengembalikan

>>> Day.MONDAY = 0
Traceback (most recent call last):
    ...
AttributeError: Cannot reassign members.

>>> Day


>>> # Rebind Day
>>> Day = "Monday"
>>> Day
'Monday'
36

Operator kesetaraan

>>> Day.MONDAY = 0
Traceback (most recent call last):
    ...
AttributeError: Cannot reassign members.

>>> Day


>>> # Rebind Day
>>> Day = "Monday"
>>> Day
'Monday'
28 dan
>>> Day.MONDAY = 0
Traceback (most recent call last):
    ...
AttributeError: Cannot reassign members.

>>> Day


>>> # Rebind Day
>>> Day = "Monday"
>>> Day
'Monday'
29 juga bekerja antar anggota pencacahan

>>>

>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> type(Day.MONDAY)


>>> type(Day.TUESDAY)

0

Pencacahan Python mendukung kedua operator,

>>> Day.MONDAY = 0
Traceback (most recent call last):
    ...
AttributeError: Cannot reassign members.

>>> Day


>>> # Rebind Day
>>> Day = "Monday"
>>> Day
'Monday'
28 dan
>>> Day.MONDAY = 0
Traceback (most recent call last):
    ...
AttributeError: Cannot reassign members.

>>> Day


>>> # Rebind Day
>>> Day = "Monday"
>>> Day
'Monday'
29, dengan mendelegasikan masing-masing ke
>>> Day.MONDAY = 0
Traceback (most recent call last):
    ...
AttributeError: Cannot reassign members.

>>> Day


>>> # Rebind Day
>>> Day = "Monday"
>>> Day
'Monday'
26 dan
>>> Day.MONDAY = 0
Traceback (most recent call last):
    ...
AttributeError: Cannot reassign members.

>>> Day


>>> # Rebind Day
>>> Day = "Monday"
>>> Day
'Monday'
27

Seperti yang telah Anda pelajari, anggota enum selalu memiliki nilai konkret yang dapat berupa angka, string, atau objek lainnya. Karena itu, menjalankan perbandingan kesetaraan antara anggota enum dan objek umum dapat menggoda

Namun, perbandingan semacam ini tidak berfungsi seperti yang diharapkan karena perbandingan sebenarnya didasarkan pada identitas objek

>>>

>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> type(Day.MONDAY)


>>> type(Day.TUESDAY)

1

Meskipun nilai anggota sama dengan bilangan bulat di setiap contoh, perbandingan ini mengembalikan

>>> Day.MONDAY = 0
Traceback (most recent call last):
    ...
AttributeError: Cannot reassign members.

>>> Day


>>> # Rebind Day
>>> Day = "Monday"
>>> Day
'Monday'
36. Ini karena anggota enum biasa membandingkan berdasarkan identitas objek daripada nilai. Pada contoh di atas, Anda membandingkan anggota enum dengan bilangan bulat, seperti membandingkan apel dan jeruk. Mereka tidak akan pernah membandingkan secara setara, karena mereka memiliki identitas yang berbeda

Catatan. , Anda akan belajar tentang

>>> from enum import Enum

>>> class Grade(Enum):
..     A = 90
..     B = 80
..     C = 70
..     D = 60
..     F = 0
...

>>> list(Grade)
[
    ,
    ,
    ,
    ,
    
]
_5 yang merupakan pencacahan khusus yang dapat dibandingkan dengan bilangan bulat

Terakhir, fitur enumerasi terkait perbandingan lainnya adalah Anda dapat melakukan tes keanggotaan menggunakan operator

>>> Day.MONDAY = 0
Traceback (most recent call last):
    ...
AttributeError: Cannot reassign members.

>>> Day


>>> # Rebind Day
>>> Day = "Monday"
>>> Day
'Monday'
46 dan
>>> Day.MONDAY = 0
Traceback (most recent call last):
    ...
AttributeError: Cannot reassign members.

>>> Day


>>> # Rebind Day
>>> Day = "Monday"
>>> Day
'Monday'
47

>>>

>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> type(Day.MONDAY)


>>> type(Day.TUESDAY)

2

Pencacahan Python mendukung

>>> Day.MONDAY = 0
Traceback (most recent call last):
    ...
AttributeError: Cannot reassign members.

>>> Day


>>> # Rebind Day
>>> Day = "Monday"
>>> Day
'Monday'
46 dan
>>> Day.MONDAY = 0
Traceback (most recent call last):
    ...
AttributeError: Cannot reassign members.

>>> Day


>>> # Rebind Day
>>> Day = "Monday"
>>> Day
'Monday'
47 operator secara default. Dengan menggunakan operator ini, Anda dapat memeriksa apakah anggota tertentu hadir dalam pencacahan tertentu

Hilangkan iklan

Mengurutkan Enumerasi

Secara default, enum Python tidak mendukung operator pembanding seperti

>>> Day.MONDAY = 0
Traceback (most recent call last):
    ...
AttributeError: Cannot reassign members.

>>> Day


>>> # Rebind Day
>>> Day = "Monday"
>>> Day
'Monday'
50,
>>> Day.MONDAY = 0
Traceback (most recent call last):
    ...
AttributeError: Cannot reassign members.

>>> Day


>>> # Rebind Day
>>> Day = "Monday"
>>> Day
'Monday'
51,
>>> Day.MONDAY = 0
Traceback (most recent call last):
    ...
AttributeError: Cannot reassign members.

>>> Day


>>> # Rebind Day
>>> Day = "Monday"
>>> Day
'Monday'
52, dan
>>> Day.MONDAY = 0
Traceback (most recent call last):
    ...
AttributeError: Cannot reassign members.

>>> Day


>>> # Rebind Day
>>> Day = "Monday"
>>> Day
'Monday'
53. Itu sebabnya Anda tidak dapat mengurutkan anggota enumerasi menggunakan fungsi
>>> Day.MONDAY = 0
Traceback (most recent call last):
    ...
AttributeError: Cannot reassign members.

>>> Day


>>> # Rebind Day
>>> Day = "Monday"
>>> Day
'Monday'
54 bawaan secara langsung, seperti pada contoh di bawah ini

>>>

>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> type(Day.MONDAY)


>>> type(Day.TUESDAY)

3

Saat Anda menggunakan pencacahan sebagai argumen untuk

>>> Day.MONDAY = 0
Traceback (most recent call last):
    ...
AttributeError: Cannot reassign members.

>>> Day


>>> # Rebind Day
>>> Day = "Monday"
>>> Day
'Monday'
54, Anda mendapatkan
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
74 karena enum tidak mendukung operator
>>> Day.MONDAY = 0
Traceback (most recent call last):
    ...
AttributeError: Cannot reassign members.

>>> Day


>>> # Rebind Day
>>> Day = "Monday"
>>> Day
'Monday'
51. Namun, ada cara untuk berhasil mengurutkan pencacahan berdasarkan nama dan nilai anggotanya menggunakan argumen
>>> Day.MONDAY = 0
Traceback (most recent call last):
    ...
AttributeError: Cannot reassign members.

>>> Day


>>> # Rebind Day
>>> Day = "Monday"
>>> Day
'Monday'
58 dalam panggilan
>>> Day.MONDAY = 0
Traceback (most recent call last):
    ...
AttributeError: Cannot reassign members.

>>> Day


>>> # Rebind Day
>>> Day = "Monday"
>>> Day
'Monday'
54

Inilah cara melakukannya

>>>

>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> type(Day.MONDAY)


>>> type(Day.TUESDAY)

4

Pada contoh pertama, Anda menggunakan fungsi

>>> Day.MONDAY = 0
Traceback (most recent call last):
    ...
AttributeError: Cannot reassign members.

>>> Day


>>> # Rebind Day
>>> Day = "Monday"
>>> Day
'Monday'
_60 yang menggunakan anggota pencacahan sebagai argumen dan mengembalikan atribut
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
76. Dengan teknik ini, Anda dapat mengurutkan enumerasi input berdasarkan nilainya. Dalam contoh kedua, fungsi
>>> Day.MONDAY = 0
Traceback (most recent call last):
    ...
AttributeError: Cannot reassign members.

>>> Day


>>> # Rebind Day
>>> Day = "Monday"
>>> Day
'Monday'
_60 mengambil anggota enum dan mengembalikan atribut
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
75. Dengan cara ini, Anda dapat mengurutkan pencacahan berdasarkan nama anggotanya

Memperluas Pencacahan Dengan Perilaku Baru

Di bagian sebelumnya, Anda telah mempelajari cara membuat dan menggunakan pencacahan dalam kode Python Anda. Hingga saat ini, Anda telah bekerja dengan enumerasi default. Ini berarti Anda telah menggunakan pencacahan Python hanya dengan fitur dan perilaku standarnya

Terkadang, Anda mungkin perlu memberikan enumerasi Anda dengan perilaku khusus. Untuk melakukan ini, Anda dapat menambahkan metode ke enum Anda dan mengimplementasikan fungsionalitas yang diperlukan. Anda juga dapat menggunakan kelas mixin. Di bagian berikut, Anda akan mempelajari cara memanfaatkan kedua teknik untuk menyesuaikan pencacahan Anda

Menambahkan dan Tweak Metode Anggota

Anda dapat menyediakan enumerasi Anda dengan fungsionalitas baru dengan menambahkan metode baru ke kelas enumerasi Anda seperti yang akan Anda lakukan dengan kelas Python biasa. Pencacahan adalah kelas dengan fitur khusus. Seperti kelas reguler, pencacahan dapat memiliki metode dan metode khusus

Perhatikan contoh berikut, diadaptasi dari

>>>

>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> type(Day.MONDAY)


>>> type(Day.TUESDAY)

5

Dalam contoh ini, Anda memiliki pencacahan

>>> Day.MONDAY = 0
Traceback (most recent call last):
    ...
AttributeError: Cannot reassign members.

>>> Day


>>> # Rebind Day
>>> Day = "Monday"
>>> Day
'Monday'
_64 dengan tiga anggota. Metode reguler seperti
>>> Day.MONDAY = 0
Traceback (most recent call last):
    ...
AttributeError: Cannot reassign members.

>>> Day


>>> # Rebind Day
>>> Day = "Monday"
>>> Day
'Monday'
65 terikat pada contoh enum yang mengandungnya, yang merupakan anggota enum. Jadi, Anda harus memanggil metode reguler pada anggota enum daripada pada kelas enum itu sendiri

Catatan. Ingatlah bahwa pencacahan Python tidak dapat dibuat instance-nya. Anggota pencacahan adalah contoh yang diizinkan pencacahan. Jadi, parameter

>>> Day.MONDAY = 0
Traceback (most recent call last):
    ...
AttributeError: Cannot reassign members.

>>> Day


>>> # Rebind Day
>>> Day = "Monday"
>>> Day
'Monday'
_66 mewakili anggota saat ini

Demikian pula, metode khusus beroperasi pada anggota, memberikan representasi setiap anggota yang dapat dicetak dengan baik

Akhirnya, metode

>>> Day.MONDAY = 0
Traceback (most recent call last):
    ...
AttributeError: Cannot reassign members.

>>> Day


>>> # Rebind Day
>>> Day = "Monday"
>>> Day
'Monday'
_68 adalah metode kelas, yang beroperasi pada kelas atau pencacahan itu sendiri. Metode kelas seperti ini memberikan akses ke semua anggota enum dari dalam kelas

Anda juga dapat memanfaatkan kemampuan ini untuk memuat perilaku tambahan saat Anda perlu menerapkan pola strategi. Misalnya, Anda memerlukan kelas yang memungkinkan Anda menggunakan dua strategi untuk mengurutkan daftar angka dalam urutan naik dan turun. Dalam hal ini, Anda dapat menggunakan pencacahan seperti berikut ini

>>>

>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> type(Day.MONDAY)


>>> type(Day.TUESDAY)

6

Setiap anggota

>>> Day.MONDAY = 0
Traceback (most recent call last):
    ...
AttributeError: Cannot reassign members.

>>> Day


>>> # Rebind Day
>>> Day = "Monday"
>>> Day
'Monday'
_69 mewakili strategi penyortiran. Metode ini membuat anggota
>>> Day.MONDAY = 0
Traceback (most recent call last):
    ...
AttributeError: Cannot reassign members.

>>> Day


>>> # Rebind Day
>>> Day = "Monday"
>>> Day
'Monday'
_69 dapat dipanggil. Di dalam
>>> Day.MONDAY = 0
Traceback (most recent call last):
    ...
AttributeError: Cannot reassign members.

>>> Day


>>> # Rebind Day
>>> Day = "Monday"
>>> Day
'Monday'
_70, Anda menggunakan fungsi
>>> Day.MONDAY = 0
Traceback (most recent call last):
    ...
AttributeError: Cannot reassign members.

>>> Day


>>> # Rebind Day
>>> Day = "Monday"
>>> Day
'Monday'
54 bawaan untuk mengurutkan nilai input dalam urutan naik atau turun, tergantung pada anggota yang dipanggil

Catatan. Contoh di atas dimaksudkan sebagai contoh demonstratif penggunaan enum untuk mengimplementasikan pola desain strategi. Dalam praktiknya, tidak perlu membuat

>>> Day.MONDAY = 0
Traceback (most recent call last):
    ...
AttributeError: Cannot reassign members.

>>> Day


>>> # Rebind Day
>>> Day = "Monday"
>>> Day
'Monday'
69 enum ini hanya dengan tujuan membungkus fungsi
>>> Day.MONDAY = 0
Traceback (most recent call last):
    ...
AttributeError: Cannot reassign members.

>>> Day


>>> # Rebind Day
>>> Day = "Monday"
>>> Day
'Monday'
54. Sebagai gantinya, Anda dapat menggunakan
>>> Day.MONDAY = 0
Traceback (most recent call last):
    ...
AttributeError: Cannot reassign members.

>>> Day


>>> # Rebind Day
>>> Day = "Monday"
>>> Day
'Monday'
_54 dan
>>> Day.MONDAY = 0
Traceback (most recent call last):
    ...
AttributeError: Cannot reassign members.

>>> Day


>>> # Rebind Day
>>> Day = "Monday"
>>> Day
'Monday'
77 argumennya secara langsung dan menghindari merekayasa solusi Anda secara berlebihan

Saat Anda memanggil

>>> Day.MONDAY = 0
Traceback (most recent call last):
    ...
AttributeError: Cannot reassign members.

>>> Day


>>> # Rebind Day
>>> Day = "Monday"
>>> Day
'Monday'
_78, nomor input diurutkan dalam urutan menaik. Sebaliknya, saat Anda memanggil
>>> Day.MONDAY = 0
Traceback (most recent call last):
    ...
AttributeError: Cannot reassign members.

>>> Day


>>> # Rebind Day
>>> Day = "Monday"
>>> Day
'Monday'
_79, nomor tersebut diurutkan dalam urutan menurun. Itu dia. Anda telah menggunakan pencacahan untuk menerapkan pola desain strategi dengan cepat

Hilangkan iklan

Pencampuran Pencacahan Dengan Jenis Lain

Python mendukung sebagai bagian dari fitur berorientasi objeknya. Ini berarti bahwa di Python, Anda bisa mewarisi banyak kelas saat membuat hierarki kelas. Warisan berganda sangat berguna saat Anda ingin menggunakan kembali fungsionalitas dari beberapa kelas secara bersamaan

Praktik umum dalam pemrograman berorientasi objek adalah menggunakan apa yang dikenal sebagai kelas mixin. Kelas-kelas ini menyediakan fungsionalitas yang dapat digunakan kelas lain. Di Python, Anda bisa menambahkan kelas mixin ke daftar induk dari kelas tertentu untuk mendapatkan fungsionalitas mixin secara otomatis

Misalnya, Anda menginginkan pencacahan yang mendukung perbandingan bilangan bulat. Dalam hal ini, Anda dapat menggunakan tipe

>>> Day.MONDAY = 0
Traceback (most recent call last):
    ...
AttributeError: Cannot reassign members.

>>> Day


>>> # Rebind Day
>>> Day = "Monday"
>>> Day
'Monday'
80 bawaan sebagai mixin saat menentukan enum Anda

>>>

>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> type(Day.MONDAY)


>>> type(Day.TUESDAY)

7

Dalam contoh ini, kelas

>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
_00 Anda mewarisi dari
>>> Day.MONDAY = 0
Traceback (most recent call last):
    ...
AttributeError: Cannot reassign members.

>>> Day


>>> # Rebind Day
>>> Day = "Monday"
>>> Day
'Monday'
80 dan
>>> from enum import Enum

>>> class Grade(Enum):
..     A = 90
..     B = 80
..     C = 70
..     D = 60
..     F = 0
...

>>> list(Grade)
[
    ,
    ,
    ,
    ,
    
]
2. Mewarisi dari tipe
>>> Day.MONDAY = 0
Traceback (most recent call last):
    ...
AttributeError: Cannot reassign members.

>>> Day


>>> # Rebind Day
>>> Day = "Monday"
>>> Day
'Monday'
80 memungkinkan perbandingan langsung antara anggota melalui operator perbandingan
>>> Day.MONDAY = 0
Traceback (most recent call last):
    ...
AttributeError: Cannot reassign members.

>>> Day


>>> # Rebind Day
>>> Day = "Monday"
>>> Day
'Monday'
50,
>>> Day.MONDAY = 0
Traceback (most recent call last):
    ...
AttributeError: Cannot reassign members.

>>> Day


>>> # Rebind Day
>>> Day = "Monday"
>>> Day
'Monday'
51,
>>> Day.MONDAY = 0
Traceback (most recent call last):
    ...
AttributeError: Cannot reassign members.

>>> Day


>>> # Rebind Day
>>> Day = "Monday"
>>> Day
'Monday'
52, dan
>>> Day.MONDAY = 0
Traceback (most recent call last):
    ...
AttributeError: Cannot reassign members.

>>> Day


>>> # Rebind Day
>>> Day = "Monday"
>>> Day
'Monday'
53. Itu juga memungkinkan perbandingan antara
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
_00 anggota dan bilangan bulat

Terakhir, perhatikan bahwa saat Anda menggunakan tipe data sebagai mixin, atribut

>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
76 anggota tidak sama dengan anggota itu sendiri, meskipun setara dan akan dibandingkan seperti itu. Itu sebabnya Anda dapat membandingkan anggota
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
00 dengan bilangan bulat secara langsung

Catatan. Menggunakan nilai anggota enum integer adalah praktik yang cukup umum. Itu sebabnya modul

>>> from enum import Enum

>>> class Grade(Enum):
..     A = 90
..     B = 80
..     C = 70
..     D = 60
..     F = 0
...

>>> list(Grade)
[
    ,
    ,
    ,
    ,
    
]
_1 menyediakan
>>> from enum import Enum

>>> class Grade(Enum):
..     A = 90
..     B = 80
..     C = 70
..     D = 60
..     F = 0
...

>>> list(Grade)
[
    ,
    ,
    ,
    ,
    
]
5 untuk membuat enumerasi dengan nilai integer secara langsung. Anda akan mempelajari lebih lanjut tentang kelas ini di bagian bernama

Contoh di atas menunjukkan bahwa membuat pencacahan dengan kelas mixin seringkali sangat membantu saat Anda perlu menggunakan kembali fungsionalitas tertentu. Jika Anda memutuskan untuk menggunakan teknik ini di beberapa enum Anda, maka Anda harus tetap menggunakan tanda tangan berikut

>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> type(Day.MONDAY)


>>> type(Day.TUESDAY)

8

Tanda tangan ini menyiratkan bahwa Anda dapat memiliki satu atau lebih kelas mixin, paling banyak satu kelas tipe data, dan kelas enum induk, dalam urutan itu

Perhatikan contoh-contoh berikut

>>>

>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> type(Day.MONDAY)


>>> type(Day.TUESDAY)

9

Kelas

>>> Day.MONDAY = 0
Traceback (most recent call last):
    ...
AttributeError: Cannot reassign members.

>>> Day


>>> # Rebind Day
>>> Day = "Monday"
>>> Day
'Monday'
_94 menunjukkan bahwa dalam urutan basis, Anda harus menempatkan kelas mixin sebanyak yang Anda butuhkan—tetapi hanya satu tipe data—sebelum
>>> from enum import Enum

>>> class Grade(Enum):
..     A = 90
..     B = 80
..     C = 70
..     D = 60
..     F = 0
...

>>> list(Grade)
[
    ,
    ,
    ,
    ,
    
]
2

>>> Day.MONDAY = 0
Traceback (most recent call last):
    ...
AttributeError: Cannot reassign members.

>>> Day


>>> # Rebind Day
>>> Day = "Monday"
>>> Day
'Monday'
96 menunjukkan bahwa jika Anda menempatkan
>>> from enum import Enum

>>> class Grade(Enum):
..     A = 90
..     B = 80
..     C = 70
..     D = 60
..     F = 0
...

>>> list(Grade)
[
    ,
    ,
    ,
    ,
    
]
2 di posisi apa pun selain yang terakhir, maka Anda akan mendapatkan
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
74 dengan informasi tentang tanda tangan yang benar untuk digunakan. Sementara itu,
>>> Day.MONDAY = 0
Traceback (most recent call last):
    ...
AttributeError: Cannot reassign members.

>>> Day


>>> # Rebind Day
>>> Day = "Monday"
>>> Day
'Monday'
_99 mengonfirmasi bahwa daftar kelas mixin Anda harus memiliki paling banyak satu tipe data konkret, seperti
>>> Day.MONDAY = 0
Traceback (most recent call last):
    ...
AttributeError: Cannot reassign members.

>>> Day


>>> # Rebind Day
>>> Day = "Monday"
>>> Day
'Monday'
80 atau
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> type(Day.MONDAY)


>>> type(Day.TUESDAY)

01

Perlu diingat bahwa jika Anda menggunakan tipe data konkrit dalam daftar kelas mixin, maka nilai anggota harus cocok dengan tipe tipe data spesifik ini.

Menjelajahi Kelas Pencacahan Lainnya

Selain

>>> from enum import Enum

>>> class Grade(Enum):
..     A = 90
..     B = 80
..     C = 70
..     D = 60
..     F = 0
...

>>> list(Grade)
[
    ,
    ,
    ,
    ,
    
]
_2, modul
>>> from enum import Enum

>>> class Grade(Enum):
..     A = 90
..     B = 80
..     C = 70
..     D = 60
..     F = 0
...

>>> list(Grade)
[
    ,
    ,
    ,
    ,
    
]
1 menyediakan beberapa kelas tambahan yang memungkinkan Anda membuat pencacahan dengan perilaku tertentu. Anda akan memiliki kelas
>>> from enum import Enum

>>> class Grade(Enum):
..     A = 90
..     B = 80
..     C = 70
..     D = 60
..     F = 0
...

>>> list(Grade)
[
    ,
    ,
    ,
    ,
    
]
5 untuk membuat konstanta enumerasi yang juga merupakan subkelas dari
>>> Day.MONDAY = 0
Traceback (most recent call last):
    ...
AttributeError: Cannot reassign members.

>>> Day


>>> # Rebind Day
>>> Day = "Monday"
>>> Day
'Monday'
80, yang menyiratkan bahwa semua anggota akan memiliki semua fitur bilangan bulat

Anda juga akan menemukan lebih banyak kelas khusus, seperti

>>> from enum import Enum

>>> class Grade(Enum):
..     A = 90
..     B = 80
..     C = 70
..     D = 60
..     F = 0
...

>>> list(Grade)
[
    ,
    ,
    ,
    ,
    
]
6 dan
>>> from enum import Enum

>>> class Grade(Enum):
..     A = 90
..     B = 80
..     C = 70
..     D = 60
..     F = 0
...

>>> list(Grade)
[
    ,
    ,
    ,
    ,
    
]
7. Kedua kelas akan memungkinkan Anda untuk membuat kumpulan konstanta yang disebutkan yang dapat Anda gabungkan menggunakan operator bitwise. Di bagian berikut, Anda akan menjelajahi kelas-kelas ini dan cara kerjanya di Python

Membangun Pencacahan Integer. >>> from enum import Enum >>> class Grade(Enum): .. A = 90 .. B = 80 .. C = 70 .. D = 60 .. F = 0 ... >>> list(Grade) [ , , , , ] _5

Pencacahan bilangan bulat sangat umum sehingga modul

>>> from enum import Enum

>>> class Grade(Enum):
..     A = 90
..     B = 80
..     C = 70
..     D = 60
..     F = 0
...

>>> list(Grade)
[
    ,
    ,
    ,
    ,
    
]
1 mengekspor kelas khusus yang disebut
>>> from enum import Enum

>>> class Grade(Enum):
..     A = 90
..     B = 80
..     C = 70
..     D = 60
..     F = 0
...

>>> list(Grade)
[
    ,
    ,
    ,
    ,
    
]
5 yang secara khusus dibuat untuk mencakup kasus penggunaan ini. Jika Anda membutuhkan anggota pencacahan Anda untuk berperilaku seperti bilangan bulat, maka Anda harus mewarisi dari
>>> from enum import Enum

>>> class Grade(Enum):
..     A = 90
..     B = 80
..     C = 70
..     D = 60
..     F = 0
...

>>> list(Grade)
[
    ,
    ,
    ,
    ,
    
]
5 daripada dari
>>> from enum import Enum

>>> class Grade(Enum):
..     A = 90
..     B = 80
..     C = 70
..     D = 60
..     F = 0
...

>>> list(Grade)
[
    ,
    ,
    ,
    ,
    
]
2

Subklasifikasi

>>> from enum import Enum

>>> class Grade(Enum):
..     A = 90
..     B = 80
..     C = 70
..     D = 60
..     F = 0
...

>>> list(Grade)
[
    ,
    ,
    ,
    ,
    
]
_5 sama dengan menggunakan pewarisan berganda dengan
>>> Day.MONDAY = 0
Traceback (most recent call last):
    ...
AttributeError: Cannot reassign members.

>>> Day


>>> # Rebind Day
>>> Day = "Monday"
>>> Day
'Monday'
80 sebagai kelas mixin

>>>

>>> from enum import Enum

>>> class Season(Enum):
..     WINTER, SPRING, SUMMER, FALL = range(1, 5)
...

>>> list(Season)
[
    ,
    ,
    ,
    
]
0

Sekarang

>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
_00 mewarisi langsung dari
>>> from enum import Enum

>>> class Grade(Enum):
..     A = 90
..     B = 80
..     C = 70
..     D = 60
..     F = 0
...

>>> list(Grade)
[
    ,
    ,
    ,
    ,
    
]
5 bukan dari
>>> Day.MONDAY = 0
Traceback (most recent call last):
    ...
AttributeError: Cannot reassign members.

>>> Day


>>> # Rebind Day
>>> Day = "Monday"
>>> Day
'Monday'
80 dan
>>> from enum import Enum

>>> class Grade(Enum):
..     A = 90
..     B = 80
..     C = 70
..     D = 60
..     F = 0
...

>>> list(Grade)
[
    ,
    ,
    ,
    ,
    
]
2. Seperti versi
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
_00 sebelumnya, versi baru ini memiliki kemampuan perbandingan penuh dan mendukung semua operator perbandingan. Anda juga dapat menggunakan anggota kelas dalam operasi bilangan bulat secara langsung

>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
_00 akan secara otomatis mencoba mengonversi nilai apa pun dari tipe data yang berbeda ke bilangan bulat. Jika konversi ini tidak memungkinkan, maka Anda akan mendapatkan
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
68

>>>

>>> from enum import Enum

>>> class Season(Enum):
..     WINTER, SPRING, SUMMER, FALL = range(1, 5)
...

>>> list(Season)
[
    ,
    ,
    ,
    
]
1

Pada contoh pertama,

>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
_00 secara otomatis mengubah string
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> type(Day.MONDAY)


>>> type(Day.TUESDAY)

23 menjadi nilai integer. Pada contoh kedua, karena string
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> type(Day.MONDAY)


>>> type(Day.TUESDAY)

24 tidak memiliki nilai numerik yang valid, Anda mendapatkan
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
68, dan konversi gagal

Dalam versi Python stabil saat ini, 3. 10, modul

>>> from enum import Enum

>>> class Grade(Enum):
..     A = 90
..     B = 80
..     C = 70
..     D = 60
..     F = 0
...

>>> list(Grade)
[
    ,
    ,
    ,
    ,
    
]
_1 tidak menyertakan kelas
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> type(Day.MONDAY)


>>> type(Day.TUESDAY)

27. Namun, kelas ini adalah contoh lain dari kasus penggunaan pencacahan yang populer. Untuk alasan ini, Python 3. 11 akan menyertakan tipe dengan dukungan langsung untuk operasi string umum. Sementara itu, Anda dapat mensimulasikan perilaku kelas
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> type(Day.MONDAY)


>>> type(Day.TUESDAY)

27 dengan membuat kelas mixin dengan
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> type(Day.MONDAY)


>>> type(Day.TUESDAY)

01 dan
>>> from enum import Enum

>>> class Grade(Enum):
..     A = 90
..     B = 80
..     C = 70
..     D = 60
..     F = 0
...

>>> list(Grade)
[
    ,
    ,
    ,
    ,
    
]
2 sebagai kelas induk

Hilangkan iklan

Membuat Bendera Bilangan Bulat. >>> from enum import Enum >>> class Grade(Enum): .. A = 90 .. B = 80 .. C = 70 .. D = 60 .. F = 0 ... >>> list(Grade) [ , , , , ] 6 dan >>> from enum import Enum >>> class Grade(Enum): .. A = 90 .. B = 80 .. C = 70 .. D = 60 .. F = 0 ... >>> list(Grade) [ , , , , ] 7

Anda dapat menggunakan sebagai kelas dasar untuk pencacahan yang harus mendukung operator bitwise. Melakukan operasi bitwise pada anggota subclass

>>> from enum import Enum

>>> class Grade(Enum):
..     A = 90
..     B = 80
..     C = 70
..     D = 60
..     F = 0
...

>>> list(Grade)
[
    ,
    ,
    ,
    ,
    
]
6 akan mengembalikan objek yang juga merupakan anggota enum yang mendasarinya

Berikut adalah contoh pencacahan

>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> type(Day.MONDAY)


>>> type(Day.TUESDAY)

_36 yang memungkinkan Anda mengelola peran pengguna yang berbeda dalam satu objek gabungan

>>>

>>> from enum import Enum

>>> class Season(Enum):
..     WINTER, SPRING, SUMMER, FALL = range(1, 5)
...

>>> list(Season)
[
    ,
    ,
    ,
    
]
2

Dalam cuplikan kode ini, Anda membuat pencacahan yang menyimpan serangkaian peran pengguna dalam aplikasi tertentu. Anggota pencacahan ini menyimpan nilai bilangan bulat yang dapat Anda gabungkan menggunakan operator bitwise OR (

>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> type(Day.MONDAY)


>>> type(Day.TUESDAY)

37). Misalnya, pengguna bernama John memiliki peran
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> type(Day.MONDAY)


>>> type(Day.TUESDAY)

38 dan
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> type(Day.MONDAY)


>>> type(Day.TUESDAY)

39. Perhatikan bahwa objek yang disimpan di
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> type(Day.MONDAY)


>>> type(Day.TUESDAY)

_40 adalah anggota dari pencacahan ________38______36 Anda

Catatan. Anda harus ingat bahwa masing-masing anggota enum berdasarkan

>>> from enum import Enum

>>> class Grade(Enum):
..     A = 90
..     B = 80
..     C = 70
..     D = 60
..     F = 0
...

>>> list(Grade)
[
    ,
    ,
    ,
    ,
    
]
6, juga dikenal sebagai bendera, harus mengambil nilai pangkat dua (1, 2, 4, 8, …). Namun, ini bukan persyaratan untuk kombinasi bendera, seperti
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> type(Day.MONDAY)


>>> type(Day.TUESDAY)

43

Dalam contoh di atas, Anda mendefinisikan

>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> type(Day.MONDAY)


>>> type(Day.TUESDAY)

_43 sebagai kombinasi peran. Nilainya dihasilkan dari penerapan operator OR bitwise ke daftar lengkap peran sebelumnya dalam pencacahan

>>> from enum import Enum

>>> class Grade(Enum):
..     A = 90
..     B = 80
..     C = 70
..     D = 60
..     F = 0
...

>>> list(Grade)
[
    ,
    ,
    ,
    ,
    
]
6 juga mendukung operasi bilangan bulat, seperti operasi aritmatika dan perbandingan. Namun, jenis operasi ini mengembalikan bilangan bulat daripada objek anggota

>>>

>>> from enum import Enum

>>> class Season(Enum):
..     WINTER, SPRING, SUMMER, FALL = range(1, 5)
...

>>> list(Season)
[
    ,
    ,
    ,
    
]
3

>>> from enum import Enum

>>> class Grade(Enum):
..     A = 90
..     B = 80
..     C = 70
..     D = 60
..     F = 0
...

>>> list(Grade)
[
    ,
    ,
    ,
    ,
    
]
_6 anggota juga merupakan subkelas dari
>>> Day.MONDAY = 0
Traceback (most recent call last):
    ...
AttributeError: Cannot reassign members.

>>> Day


>>> # Rebind Day
>>> Day = "Monday"
>>> Day
'Monday'
80. Itu sebabnya Anda bisa menggunakannya dalam ekspresi yang melibatkan bilangan bulat. Dalam situasi ini, nilai yang dihasilkan akan berupa bilangan bulat, bukan anggota enum

Terakhir, Anda juga akan menemukan kelas

>>> from enum import Enum

>>> class Grade(Enum):
..     A = 90
..     B = 80
..     C = 70
..     D = 60
..     F = 0
...

>>> list(Grade)
[
    ,
    ,
    ,
    ,
    
]
_7 tersedia di
>>> from enum import Enum

>>> class Grade(Enum):
..     A = 90
..     B = 80
..     C = 70
..     D = 60
..     F = 0
...

>>> list(Grade)
[
    ,
    ,
    ,
    ,
    
]
1. Kelas ini bekerja mirip dengan
>>> from enum import Enum

>>> class Grade(Enum):
..     A = 90
..     B = 80
..     C = 70
..     D = 60
..     F = 0
...

>>> list(Grade)
[
    ,
    ,
    ,
    ,
    
]
_6 dan memiliki beberapa batasan tambahan

>>>

>>> from enum import Enum

>>> class Season(Enum):
..     WINTER, SPRING, SUMMER, FALL = range(1, 5)
...

>>> list(Season)
[
    ,
    ,
    ,
    
]
4

Perbedaan utama antara

>>> from enum import Enum

>>> class Grade(Enum):
..     A = 90
..     B = 80
..     C = 70
..     D = 60
..     F = 0
...

>>> list(Grade)
[
    ,
    ,
    ,
    ,
    
]
6 dan
>>> from enum import Enum

>>> class Grade(Enum):
..     A = 90
..     B = 80
..     C = 70
..     D = 60
..     F = 0
...

>>> list(Grade)
[
    ,
    ,
    ,
    ,
    
]
7 adalah bahwa yang terakhir tidak mewarisi dari
>>> Day.MONDAY = 0
Traceback (most recent call last):
    ...
AttributeError: Cannot reassign members.

>>> Day


>>> # Rebind Day
>>> Day = "Monday"
>>> Day
'Monday'
80. Oleh karena itu, operasi bilangan bulat tidak didukung. Saat Anda mencoba menggunakan anggota
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> type(Day.MONDAY)


>>> type(Day.TUESDAY)

36 dalam operasi bilangan bulat, Anda mendapatkan
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
74

Sama seperti anggota

>>> from enum import Enum

>>> class Grade(Enum):
..     A = 90
..     B = 80
..     C = 70
..     D = 60
..     F = 0
...

>>> list(Grade)
[
    ,
    ,
    ,
    ,
    
]
_6 enum, anggota
>>> from enum import Enum

>>> class Grade(Enum):
..     A = 90
..     B = 80
..     C = 70
..     D = 60
..     F = 0
...

>>> list(Grade)
[
    ,
    ,
    ,
    ,
    
]
7 enum harus memiliki nilai pangkat dua. Sekali lagi, ini tidak berlaku untuk kombinasi bendera, seperti
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> type(Day.MONDAY)


>>> type(Day.TUESDAY)

43 pada contoh di atas

Menggunakan Pencacahan. Dua Contoh Praktis

Pencacahan Python dapat membantu Anda meningkatkan keterbacaan dan pengaturan kode Anda. Anda dapat menggunakannya untuk mengelompokkan konstanta serupa yang kemudian dapat Anda gunakan dalam kode untuk mengganti string, angka, dan nilai lainnya dengan nama yang dapat dibaca dan bermakna

Di bagian berikut, Anda akan membuat kode beberapa contoh praktis yang berhubungan dengan kasus penggunaan enum yang umum. Contoh-contoh ini akan membantu Anda memutuskan kapan kode Anda dapat memperoleh manfaat dari penggunaan pencacahan

Mengganti Angka Ajaib

Pencacahan sangat bagus ketika Anda perlu mengganti kumpulan angka ajaib terkait, seperti kode status HTTP, port komputer, dan kode keluar. Dengan pencacahan, Anda dapat mengelompokkan konstanta numerik ini dan menetapkan nama yang dapat dibaca dan deskriptif yang dapat Anda gunakan dan gunakan kembali dalam kode Anda nanti

Misalkan Anda memiliki fungsi berikut sebagai bagian dari aplikasi yang mengambil dan memproses konten HTTP langsung dari web

>>>

>>> from enum import Enum

>>> class Season(Enum):
..     WINTER, SPRING, SUMMER, FALL = range(1, 5)
...

>>> list(Season)
[
    ,
    ,
    ,
    
]
5

Fungsi

>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> type(Day.MONDAY)


>>> type(Day.TUESDAY)

_59 Anda mengambil objek HTTP
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> type(Day.MONDAY)


>>> type(Day.TUESDAY)

60 sebagai argumen. Kemudian mendapat kode status dari
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> type(Day.MONDAY)


>>> type(Day.TUESDAY)

_60 menggunakan metode
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> type(Day.MONDAY)


>>> type(Day.TUESDAY)

62. Pernyataan
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
_97 …
>>> Day.MONDAY = 0
Traceback (most recent call last):
    ...
AttributeError: Cannot reassign members.

>>> Day


>>> # Rebind Day
>>> Day = "Monday"
>>> Day
'Monday'
01 secara berurutan membandingkan kode status saat ini dengan beberapa kode status standar yang diberikan sebagai angka ajaib dalam contoh Anda

Jika terjadi kecocokan, maka blok kode pada

>>> Day.MONDAY = 0
Traceback (most recent call last):
    ...
AttributeError: Cannot reassign members.

>>> Day


>>> # Rebind Day
>>> Day = "Monday"
>>> Day
'Monday'
01 yang cocok akan berjalan. Jika tidak ada kecocokan, maka default
>>> Day.MONDAY = 0
Traceback (most recent call last):
    ...
AttributeError: Cannot reassign members.

>>> Day


>>> # Rebind Day
>>> Day = "Monday"
>>> Day
'Monday'
_01 berjalan. Perhatikan bahwa
>>> Day.MONDAY = 0
Traceback (most recent call last):
    ...
AttributeError: Cannot reassign members.

>>> Day


>>> # Rebind Day
>>> Day = "Monday"
>>> Day
'Monday'
_01 default adalah yang menggunakan garis bawah (
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> type(Day.MONDAY)


>>> type(Day.TUESDAY)

68) sebagai kriteria kecocokan

Kode lainnya terhubung ke halaman web sampel, melakukan permintaan

>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> type(Day.MONDAY)


>>> type(Day.TUESDAY)

69, mengambil objek respons, dan memprosesnya menggunakan fungsi
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> type(Day.MONDAY)


>>> type(Day.TUESDAY)

59 Anda. Klausa menutup koneksi aktif untuk menghindari kebocoran sumber daya

Meskipun kode ini berfungsi, mungkin sulit untuk membaca dan memahami bagi orang yang tidak terbiasa dengan kode status HTTP dan artinya yang sesuai. Untuk memperbaiki masalah ini dan membuat kode Anda lebih mudah dibaca dan dipelihara, Anda dapat menggunakan pencacahan untuk mengelompokkan kode status HTTP dan memberinya nama deskriptif

>>>

>>> from enum import Enum

>>> class Season(Enum):
..     WINTER, SPRING, SUMMER, FALL = range(1, 5)
...

>>> list(Season)
[
    ,
    ,
    ,
    
]
6

Kode ini menambahkan pencacahan baru yang disebut ________23______47 ke aplikasi Anda. Enum ini mengelompokkan kode status HTTP target dan memberinya nama yang dapat dibaca. Itu juga membuatnya sangat konstan, yang membuat aplikasi Anda lebih andal

Di dalam

>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> type(Day.MONDAY)


>>> type(Day.TUESDAY)

_59, Anda menggunakan nama yang dapat dibaca manusia dan deskriptif yang menyediakan informasi konteks dan konten. Sekarang siapa pun yang membaca kode Anda akan segera mengetahui bahwa kriteria yang cocok adalah kode status HTTP. Mereka juga akan melihat arti dari setiap kode target dengan cepat

Hilangkan iklan

Membuat Mesin Negara

Kasus penggunaan lain yang menarik dari pencacahan adalah ketika Anda menggunakannya untuk menciptakan kembali kemungkinan status yang berbeda dari sistem tertentu. Jika sistem Anda dapat berada tepat di salah satu dari sejumlah negara bagian yang terbatas pada waktu tertentu, maka sistem Anda berfungsi sebagai mesin negara. Pencacahan berguna saat Anda perlu menerapkan pola desain umum ini

Sebagai contoh cara menggunakan enum untuk mengimplementasikan pola mesin status, Anda membuat simulator pemutar disk minimal. Untuk memulai, lanjutkan dan buat file ________38______74 dengan konten berikut

>>> from enum import Enum

>>> class Season(Enum):
..     WINTER, SPRING, SUMMER, FALL = range(1, 5)
...

>>> list(Season)
[
    ,
    ,
    ,
    
]
7

Di sini, Anda mendefinisikan kelas

>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> type(Day.MONDAY)


>>> type(Day.TUESDAY)

_75. Kelas ini mengelompokkan semua kemungkinan status pemutar disk Anda.
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> type(Day.MONDAY)


>>> type(Day.TUESDAY)

76,
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> type(Day.MONDAY)


>>> type(Day.TUESDAY)

77,
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> type(Day.MONDAY)


>>> type(Day.TUESDAY)

78, dan
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> type(Day.MONDAY)


>>> type(Day.TUESDAY)

79. Sekarang Anda dapat membuat kode kelas pemain
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> type(Day.MONDAY)


>>> type(Day.TUESDAY)

_80, yang akan terlihat seperti ini

>>> from enum import Enum

>>> class Season(Enum):
..     WINTER, SPRING, SUMMER, FALL = range(1, 5)
...

>>> list(Season)
[
    ,
    ,
    ,
    
]
8

Kelas

>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> type(Day.MONDAY)


>>> type(Day.TUESDAY)

_80 mengimplementasikan semua tindakan yang mungkin dilakukan oleh pemutar Anda, termasuk memasukkan dan mengeluarkan disk, memutar, menjeda, dan menghentikan pemutar. Perhatikan bagaimana setiap metode di
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> type(Day.MONDAY)


>>> type(Day.TUESDAY)

_80 memeriksa dan memperbarui status pemain saat ini dengan memanfaatkan pencacahan
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> type(Day.MONDAY)


>>> type(Day.TUESDAY)

75 Anda

Untuk melengkapi contoh Anda, Anda akan menggunakan idiom

>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> type(Day.MONDAY)


>>> type(Day.TUESDAY)

84 tradisional untuk membungkus beberapa baris kode yang akan memungkinkan Anda untuk mencoba kelas
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> type(Day.MONDAY)


>>> type(Day.TUESDAY)

80

>>> from enum import Enum

>>> class Season(Enum):
..     WINTER, SPRING, SUMMER, FALL = range(1, 5)
...

>>> list(Season)
[
    ,
    ,
    ,
    
]
_9

Dalam cuplikan kode ini, pertama-tama Anda menentukan variabel

>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> type(Day.MONDAY)


>>> type(Day.TUESDAY)

86, yang menampung urutan metode yang akan Anda panggil dari
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> type(Day.MONDAY)


>>> type(Day.TUESDAY)

80 untuk mencoba kelas. Kemudian Anda membuat turunan dari kelas pemutar disk Anda. Terakhir, Anda memulai
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> list(Day)
[
    ,
    ,
    ,
    ,
    ,
    ,
    
]
_83 loop untuk mengulangi daftar tindakan dan menjalankan setiap tindakan melalui instance
>>> from enum import Enum

>>> class Day(Enum):
..     MONDAY = 1
..     TUESDAY = 2
..     WEDNESDAY = 3
..     THURSDAY = 4
..     FRIDAY = 5
..     SATURDAY = 6
..     SUNDAY = 7
...

>>> type(Day.MONDAY)


>>> type(Day.TUESDAY)

89

Itu dia. Simulator pemutar disk Anda siap untuk diuji. Untuk menjalankannya, lanjutkan dan jalankan perintah berikut di baris perintah Anda

>>> from enum import Enum

>>> class Grade(Enum):
..     A = 90
..     B = 80
..     C = 70
..     D = 60
..     F = 0
...

>>> list(Grade)
[
    ,
    ,
    ,
    ,
    
]
_0

Keluaran perintah ini menunjukkan bahwa aplikasi Anda telah melewati semua kemungkinan keadaan. Tentu saja, contoh ini minimal dan tidak mempertimbangkan semua kemungkinan skenario. Ini adalah contoh demonstratif tentang bagaimana Anda dapat menggunakan enumerasi untuk mengimplementasikan pola state machine dalam kode Anda

Kesimpulan

Anda sekarang tahu cara membuat dan menggunakan pencacahan dengan Python. Enumerasi, atau hanya enum, adalah tipe data umum dan populer di banyak bahasa pemrograman. Dengan pencacahan, Anda dapat mengelompokkan kumpulan konstanta terkait dan mengaksesnya melalui pencacahan itu sendiri

Python tidak menyediakan sintaks enum khusus. Namun, modul

>>> from enum import Enum

>>> class Grade(Enum):
..     A = 90
..     B = 80
..     C = 70
..     D = 60
..     F = 0
...

>>> list(Grade)
[
    ,
    ,
    ,
    ,
    
]
_1 mendukung tipe data umum ini melalui kelas
>>> from enum import Enum

>>> class Grade(Enum):
..     A = 90
..     B = 80
..     C = 70
..     D = 60
..     F = 0
...

>>> list(Grade)
[
    ,
    ,
    ,
    ,
    
]
2

Dalam tutorial ini, Anda telah mempelajari caranya

  • Buat pencacahan Anda sendiri menggunakan kelas
    >>> from enum import Enum
    
    >>> class Grade(Enum):
    ..     A = 90
    ..     B = 80
    ..     C = 70
    ..     D = 60
    ..     F = 0
    ...
    
    >>> list(Grade)
    [
        ,
        ,
        ,
        ,
        
    ]
    
    2 Python
  • Bekerja dengan pencacahan dan anggotanya
  • Sediakan kelas enumerasi Anda dengan fungsionalitas baru
  • Gunakan pencacahan dengan beberapa contoh praktis

Anda juga belajar tentang jenis pencacahan berguna lainnya, seperti

>>> from enum import Enum

>>> class Grade(Enum):
..     A = 90
..     B = 80
..     C = 70
..     D = 60
..     F = 0
...

>>> list(Grade)
[
    ,
    ,
    ,
    ,
    
]
5,
>>> from enum import Enum

>>> class Grade(Enum):
..     A = 90
..     B = 80
..     C = 70
..     D = 60
..     F = 0
...

>>> list(Grade)
[
    ,
    ,
    ,
    ,
    
]
6, dan
>>> from enum import Enum

>>> class Grade(Enum):
..     A = 90
..     B = 80
..     C = 70
..     D = 60
..     F = 0
...

>>> list(Grade)
[
    ,
    ,
    ,
    ,
    
]
7. Mereka tersedia di
>>> from enum import Enum

>>> class Grade(Enum):
..     A = 90
..     B = 80
..     C = 70
..     D = 60
..     F = 0
...

>>> list(Grade)
[
    ,
    ,
    ,
    ,
    
]
_1 dan akan membantu Anda membuat enum khusus

Dengan semua pengetahuan ini, Anda sekarang siap untuk mulai menggunakan enum Python untuk mengelompokkan, memberi nama, dan menangani kumpulan konstanta yang terkait secara semantik. Pencacahan memungkinkan Anda mengatur kode dengan lebih baik, membuatnya lebih mudah dibaca, eksplisit, dan dapat dipelihara

Kode sumber. Klik di sini untuk mengunduh kode sumber gratis yang akan Anda gunakan untuk membuat enumerasi dengan Python

Tandai sebagai Selesai

🐍 Trik Python 💌

Dapatkan Trik Python singkat & manis yang dikirim ke kotak masuk Anda setiap beberapa hari. Tidak pernah ada spam. Berhenti berlangganan kapan saja. Dikuratori oleh tim Real Python

Python dapatkan enum dari nilai

Kirimi Saya Trik Python »

Tentang Leodanis Pozo Ramos

Python dapatkan enum dari nilai
Python dapatkan enum dari nilai

Leodanis adalah seorang insinyur industri yang menyukai Python dan pengembangan perangkat lunak. Dia adalah pengembang Python otodidak dengan pengalaman lebih dari 6 tahun. Dia adalah seorang penulis teknis yang rajin dengan semakin banyak artikel yang diterbitkan di Real Python dan situs lainnya

» Lebih lanjut tentang Leodanis


Setiap tutorial di Real Python dibuat oleh tim pengembang sehingga memenuhi standar kualitas tinggi kami. Anggota tim yang mengerjakan tutorial ini adalah

Python dapatkan enum dari nilai

Aldren

Python dapatkan enum dari nilai

Bartosz

Python dapatkan enum dari nilai

Geir Arne

Python dapatkan enum dari nilai

Kate

Master Keterampilan Python Dunia Nyata Dengan Akses Tanpa Batas ke Python Nyata

Bergabunglah dengan kami dan dapatkan akses ke ribuan tutorial, kursus video langsung, dan komunitas pakar Pythonista

Tingkatkan Keterampilan Python Anda »

Guru Keterampilan Python Dunia Nyata
Dengan Akses Tak Terbatas ke Real Python

Bergabunglah dengan kami dan dapatkan akses ke ribuan tutorial, kursus video langsung, dan komunitas ahli Pythonista

Tingkatkan Keterampilan Python Anda »

Bagaimana menurutmu?

Nilai artikel ini

Tweet Bagikan Bagikan Email

Apa takeaway # 1 Anda atau hal favorit yang Anda pelajari?

Kiat Berkomentar. Komentar yang paling berguna adalah yang ditulis dengan tujuan belajar dari atau membantu siswa lain. dan dapatkan jawaban atas pertanyaan umum di portal dukungan kami

Bagaimana cara mendapatkan nama enum dari nilai dengan python?

Untuk mendapatkan nama enum berdasarkan nilai, teruskan nilai ke kelas enumerasi dan akses atribut name , e. g. Ukuran(1). nama. Ketika nilai diteruskan ke kelas, kami mendapatkan akses ke anggota enum yang sesuai, di mana kami dapat mengakses atribut nama.

Bisakah kita mendapatkan enum berdasarkan nilai?

Dapatkan nilai Enum . Pada contoh pertama, tipe defaultnya adalah int jadi kita harus mengetikkannya ke int. Juga, kita bisa mendapatkan nilai string dari enum tersebut dengan menggunakan metode ToString() seperti di bawah ini. To get the value of enum we can simply typecast it to its type. In the first example, the default type is int so we have to typecast it to int. Also, we can get the string value of that enum by using the ToString() method as below.

Bagaimana cara mendapatkan semua nilai enum dengan python?

Anda dapat menggunakan @classmethod dan menggunakan return list(map(lambda c. c. nilai, cls)) sebagai gantinya. Jika Anda memiliki begitu banyak Nilai Enum sehingga kecepatan lebih penting daripada keterbacaan di sini, ada hal lain yang salah.

Bagaimana Anda mengakses enum dengan python?

Metode ini dipanggil dengan dua cara berbeda. .
untuk mencari anggota yang ada. cls. Kelas enum dipanggil. nilai. Nilai untuk dicari
untuk menggunakan cls enum untuk membuat enum baru. cls. Kelas enum dipanggil. nilai. Nama Enum baru yang akan dibuat. nama. Nama/nilai anggota untuk Enum baru. modul