Python - Enums: Panduan untuk Pemula

Halo di sini, penyihir Python masa depan! Hari ini, kita akan melakukan perjalanan yang menarik ke dunia Enums di Python. Jangan khawatir jika anda belum pernah mendengar tentang Enums sebelum ini - pada akhir tutorial ini, anda akan menggunakannya seperti seorang profesional!

Python - Enums

Apa itu Enums di Python?

Bayangkan anda membuat permainan di mana pemain dapat memilih tingkat kesukaran yang berbeza. Anda boleh mewakili tingkat ini menggunakan rentetan atau nombor yang simple, tetapi apa jika anda tersilap mengeja satu tingkat atau menggunakan nombor yang tidak sah? Itulah di mana Enums datang untuk penyelamat!

Enum, singkatan untuk "enumeration," adalah satu set nilai yang dinamakan yang tidak berubah. Ia seperti satu senarai khas dengan pilihan yang telah ditetapkan yang anda boleh gunakan di atas kode anda. Mari kita melihat contoh pertama kita:

from enum import Enum

class DifficultyLevel(Enum):
EASY = 1
MEDIUM = 2
HARD = 3

Dalam kode ini, kita mengimport kelas Enum dari modul enum. Kemudian, kita membuat Enum sendiri yang dipanggil DifficultyLevel. Ia memiliki tiga anggota: EASY, MEDIUM, dan HARD, masing-masing berkaitan dengan satu nilai.

Mengapa gunakan Enums?

  1. Keterbacaan: Enums menjadikan kode anda lebih mudah dibaca. Alih-alih menggunakan nombor yang sulit untuk dimengerti, anda boleh menggunakan nama yang berarti.
  2. Keselamatan Jenis: Enums membantu menghindari kesalahan dengan memastikan anda hanya menggunakan nilai yang telah ditetapkan.
  3. Organisasi: Mereka menggabungkan konstan yang berkaitan bersama-sama, menjadikan kode anda lebih terorganisir.

Mengakses Anggota di Enums

Sekarang bahwa kita telah membuat Enum kita, mari kita lihat bagaimana kita boleh menggunakannya di atas kode kita.

print(DifficultyLevel.EASY)        # Output: DifficultyLevel.EASY
print(DifficultyLevel.EASY.name)   # Output: EASY
print(DifficultyLevel.EASY.value)  # Output: 1

# Membandingkan anggota Enum
print(DifficultyLevel.EASY == DifficultyLevel.MEDIUM)  # Output: False
print(DifficultyLevel.HARD == DifficultyLevel.HARD)    # Output: True

Mari kita pecahkan ini:

  • Kita boleh mengakses anggota Enum menggunakan notasi titik.
  • Atribut .name memberikan kita nama anggota Enum sebagai satu rentetan.
  • Atribut .value memberikan kita nilai yang berkaitan.
  • Kita boleh membandingkan anggota Enum menggunakan ==.

Di sini faktanya yang menarik: Anggota Enum adalah objek singleton. Ini berarti bahwa tidak peduli berapa kali anda mereferensikan DifficultyLevel.EASY, ia selalu adalah objek yang sama di atas memori. Ia seperti memiliki seorang Sahabat terbaik yang selalu ada untuk anda!

Mengitarikan melalui Enums

Satu dari yang paling keren tentang Enums adalah kita boleh mengitarik melalui mereka. Ini sangat berguna apabila anda ingin melakukan sesuatu dengan semua pilihan di atas Enum anda.

for level in DifficultyLevel:
print(f"Kesukaran: {level.name}, Nilai: {level.value}")

# Output:
# Kesukaran: EASY, Nilai: 1
# Kesukaran: MEDIUM, Nilai: 2
# Kesukaran: HARD, Nilai: 3

Kode ini mengulang semua anggota DifficultyLevel Enum kita, mencetak setiap nama dan nilai. Ia seperti memiliki pemandu perjalanan magis yang menunjukkan anda semua pilihan!

Fitur Enum Lanjutan

Sekarang bahwa kita telah menutupi dasar-dasar, mari kita lihat beberapa fitur lanjutan dari Enums.

Penomoran Otomatis

Jika anda tidak mahu menetapkan nilai secara manual, Python boleh melakukan itu untuk anda:

from enum import Enum, auto

class Direction(Enum):
NORTH = auto()
SOUTH = auto()
EAST = auto()
WEST = auto()

print(list(Direction))  # Output: [<Direction.NORTH: 1>, <Direction.SOUTH: 2>, <Direction.EAST: 3>, <Direction.WEST: 4>]

Fungsi auto() secara otomatis menetapkan nilai integer meningkat dimulai dari 1.

Menggunakan Enums di atas fungsi

Enums adalah sangat baik untuk parameter fungsi. Mereka menjadikan fungsi anda lebih kuat dan mandiri-dokumentasi:

def set_difficulty(level: DifficultyLevel):
print(f"Tingkat kesukaran permainan ditetapkan ke: {level.name}")

set_difficulty(DifficultyLevel.HARD)  # Output: Tingkat kesukaran permainan ditetapkan ke: HARD
set_difficulty("EASY")  # Ini akan memunculkan TypeError

Dengan menetapkan DifficultyLevel sebagai petunjuk jenis untuk parameter level, kita memberitahu Python (dan pengembang lain) bahwa fungsi ini mengharapkan anggota DifficultyLevel Enum.

Metode dan Atribut Enum

Di sini adalah satu jadual metode dan atribut Enum yang berguna:

Metode/Atribut Keterangan Contoh
Enum.name Mengembalikan nama anggota Enum DifficultyLevel.EASY.name
Enum.value Mengembalikan nilai anggota Enum DifficultyLevel.EASY.value
Enum.__members__ Kamus semua anggota Enum DifficultyLevel.__members__
Enum(value) Dapatkan anggota Enum oleh nilai DifficultyLevel(1)

Kesimpulan

Selamat! Anda baru saja meningkatkan keterampilan Python anda dengan menguasai Enums. Ingat, Enums adalah seperti pisaunya Swiss Army di atas toolkit pengoding anda - mereka mungkin nampak simple, tetapi mereka sangat serba guna dan boleh membuat kode anda lebih bersih, lebih aman, dan lebih mudah dibaca.

Pada masa anda bekerja di atas projek dan mendapati diri anda menggunakan satu set konstan yang berkaitan, pikir tentang menggunakan Enum. Anda masa depan (dan mana-mana pengembang yang bekerja dengan kode anda) akan berterima kasih kepada anda!

Teruskan untuk mengode, teruskan untuk belajar, dan ingat - di atas dunia pemrograman, setiap hari adalah peluang untuk mengenumerasikan keterampilan anda! (Mengerti? Enum-erasikan? Baiklah, saya akan pergi sekarang. ?)

Credits: Image by storyset