A.56. Python Enumeration
Enumeration (Enum) adalah nilai konstan, umumnya disiapkan untuk merepresentasikan sekumpulan data konstan yang konteksnya masih sama. Misalnya, warna yang isinya bisa merah, biru, kuning, atau warna lain.
Pembuatan enum di Python sangat mudah. Caranya dengan mendeklarasikan class baru yang meng-inherit class enum.Enum
, kemudian menuliskan kumpulan data sebagai class property-nya.
A.56.1. Enum / Enumeration
Di bawah ini, disiapkan sebuah enum bernama City
dengan isi ada 4 buah pilihan kota.
from enum import Enum
class City(Enum):
MALANG = 1
SURABAYA = 2
YOGYAKARTA = 3
JAKARTA = 4
print(list(City))
# output ➜ [<City.MALANG: 1>, <City.SURABAYA: 2>, <City.YOGYAKARTA: 3>, <City.JAKARTA: 4>
Nilai property enum bisa diisi dengan data apapun. Pada contoh di atas, nilai property enum City
diisi dengan angka numerik.
Property enum bisa diakses dalam bentuk
list
dengan cukup membungkusnya menggunakan fungsilist()
.
Selanjutnya, buat satu variabel, isi nilainya dengan salah satu property enum (misalnya City.YOGYAKARTA
), kemudian print.
city1 = City.YOGYAKARTA
print(city1)
# output ➜ City.YOGYAKARTA
print(f"name {city1.name}")
# output ➜ name YOGYAKARTA
print(f"value {city1.value}")
# output ➜ value 3
Nama enum property bisa diambil menggunakan property name
sedangkan value-nya diambil via property value
.
A.56.2. Naming convention enum
Sesuai penjelasan di halaman dokumentasi Python, nama class enum dianjurkan ditulis menggunakan CamelCase, sedangkan nama class property dituliskan UPPERCASE.
A.56.3. Notasi penulisan pengaksesan enum property
Dalam penggunaannya setidaknya ada 3 notasi pengaksesan enum property yang bisa digunakan.
Cara pertama menggunakan notasi
Enum.PROPERTY
.city1 = City.YOGYAKARTA
print(city1)
# output ➜ City.YOGYAKARTA
print(f"name {city1.name}")
# output ➜ name YOGYAKARTA
print(f"value {city1.value}")
# output ➜ value 3Cara ke-2 menggunakan notasi pengaksesan dictionary dengan key berupa string.
city2 = City["SURABAYA"]
print(city2)
# output ➜ City.SURABAYA
print(f"name {city2.name}")
# output ➜ name SURABAYA
print(f"value {city2.value}")
# output ➜ value 2Metode ini cukup berguna pada case ketika key enum yang perlu diambil yang sudah diketahui nilainya.
Cara ke-3 menggunakan notasi pengaksesan
Enum(value)
.city3 = City(4)
print(city3)
# output ➜ City.JAKARTA
print(f"name {city3.name}")
# output ➜ name JAKARTA
print(f"value {city3.value}")
# output ➜ value 4Metode ini pas digunakan ketika value enum sudah diketahui nilainya.
A.56.4. Nilai property enum
Property enum nilainya bisa berisi data numerik, string, atau tipe data lainnya.
Di atas telah dicontohkan enum City
yang property-nya berisi data numerik. Pada contoh ke-2 ini, enum Color
property-nya berisi data string.
from enum import Enum
class Color(Enum):
RED = "red"
BLUE = "blue"
print(list(Color))
# output ➜ [<Color.RED: 'red'>, <Color.BLUE: 'blue'>]
color1 = Color("red")
color2 = Color.RED
color3 = Color["BLUE"]
print(color1, color2, color3)
# output ➜ Color.RED Color.RED Color.BLUE
Selain menggunakan class enum.Enum
saat deklarasi, bisa juga menggunakan salah satu class turunan enum lainnya, diantaranya ada:
- Class
enum.Enum
➡️ property boleh berisi data bertipe apapun - Class
enum.StrEnum
➡️ property hanya boleh berisi tipe data string - Class
enum.IntEnum
➡️ property hanya boleh berisi tipe data integer
Cara penerapan variant enum yang telah disebut di atas adalah masih sama. Cukup ganti Enum
dengan turunan class yang diinginkan, lalu sesuaikan tipe data nilai property di dalamnya.
◉ StrEnum
Misalnya, enum Color
kita ubah dari menggunakan Enum
ke StrEnum
, maka kodenya seperti ini:
from enum import StrEnum
class Color(StrEnum):
RED = "red"
BLUE = "blue"
print(list(Color))
# output ➜ [<Color.RED: 'red'>, <Color.BLUE: 'blue'>]
color1 = Color("red")
color2 = Color.RED
color3 = Color["BLUE"]
print(color1, color2, color3)
# output ➜ Color.RED Color.RED Color.BLUE
◉ IntEnum
dan fungsi auto()
Untuk enum dengan property bertipe numerik, bisa menggunakan fungsi auto()
untuk generate nilai numerik unik secara otomatis. Contoh:
from enum import IntEnum, auto
class Size(IntEnum):
S = auto()
M = auto()
L = auto()
XL = auto()
print(list(Size))
# output ➜ [<Size.S: 1>, <Size.M: 2>, <Size.L: 3>, <Size.XL: 4>]
size1 = Size.M
size2 = Size.XL
print(size1, size2)
# output ➜ Size.M Size.XL
A.56.5. Pengecekan nilai enum
Operator identitas is
dan operator perbandingan ==
dan !=
bisa digunakan untuk pengecekan nilai enum.
from enum import Enum
class City(Enum):
MALANG = 1
SURABAYA = 2
YOGYAKARTA = 3
JAKARTA = 4
def say_anything(c):
if c is City.MALANG:
print("Oyi sam")
elif c == City.JAKARTA:
print("lo gue lo gue")
elif c == City.SURABAYA:
print("coeg")
elif c == City.YOGYAKARTA:
print("monggo")
city1 = City.YOGYAKARTA
say_anything(city1)
# output ➜ monggo
A.56.6. Perulangan enum
Enum merupakan tipe yang bisa langsung digunakan pada perulangan. Contoh penggunaannya:
for c in City:
print(c, c.name, c.value)
# output ↓
#
# City.MALANG MALANG 1
# City.SURABAYA SURABAYA 2
# City.YOGYAKARTA YOGYAKARTA 3
# City.JAKARTA JAKARTA 4
Catatan chapter 📑
◉ Source code praktik
github.com/novalagung/dasarpemrogramanpython-example/../enum
◉ Chapter relevan lainnya
◉ TBA
IntFlag
andFlag
https://docs.python.org/3/howto/enum.html#intflag