Cum enumerarile din Python îmbunătățesc lizibilitatea codului

Enumările sunt un tip de date popular în limbaje de programare precum C, C++ și Java. Ele vă ajută să scrieți cod sigur și mai ușor de citit.

În Python, enumerarile nu au fost întotdeauna acceptate. Cu toate acestea, începând cu versiunea 3.4, Python acceptă acum enumerari. Acest articol este un ghid despre cum să creați enumerări, cum să le folosiți și cum îmbunătățesc lizibilitatea codului.

Ce sunt enumerarile și ce fac ele?

O enumerare sau o enumerare este un tip de date definit de setul de valori pe care îl poate lua. Acest set de valori este denumit setul său de membri. Enumerările vă permit să definiți valorile pe care o variabilă le-ar putea avea mai restrâns. Acest lucru vă ajută să scrieți cod de tip sigur. De asemenea, îmbunătățește lizibilitatea.

Câțiva termeni de știut

Pe măsură ce discutăm despre enumerari, există termeni pe care ar trebui să-i definesc mai întâi, deoarece îi vom folosi foarte mult. Aceștia sunt membri și valori.

  • Membri: Acestea sunt constantele numite care formează setul de valori care aparțin enumerarii. De exemplu, enumerarea Zilelor poate conține următorii membri: duminică, luni, marți etc.
  • Valori: Acestea sunt valorile utilizate intern pentru a reprezenta fiecare membru al enumerației în mod distinct. Acest lucru va face posibilă efectuarea de comparații. De exemplu, în enumerarea Zilelor, duminica ar putea avea o valoare de 0, luni o valoare de 1, marți o valoare de 2 etc.

Acum, vom discuta despre modul în care Enums vă îmbunătățește codul.

Cum vă îmbunătățesc Enums codul

Enumerările vă îmbunătățesc codul și îl fac mai lizibil și mai puțin predispus la erori. Mai jos sunt câteva dintre motivele pentru care ar trebui să le utilizați:

  • Enumerările vă permit să definiți în mod clar ce valori le așteaptă o variabilă sau un argument de funcție. Dacă vă clarificați intențiile cu un argument de variabilă sau funcție, oamenii vă pot înțelege cu ușurință codul.
  • Enumerările fac, de asemenea, codul să se auto-documenteze. Aceasta înseamnă că nu trebuie să adăugați comentarii sau documente pentru a specifica ce valori se așteaptă o funcție. Mai degrabă, enumerarea dvs. specifică ce valori sunt așteptate.
  • Acest lucru permite, de asemenea, IDE-urilor să evidențieze erorile atunci când treceți valori incorecte și să ofere suport pentru completarea automată.
  • Ca rezultat, codul dvs. devine tip sigur și mai puțin probabil să producă erori de rulare.
  Cum să preveniți vectorii de atac în rețeaua dvs.?

În continuare, vom discuta cum să creați Enums în Python.

Cum se creează enumerari în Python

Python nu are suport nativ pentru enumerari. Dar oferă un modul enums în biblioteca standard. Vom folosi acel modul în acest tutorial. Există, de asemenea, două metode pentru a crea enumări în Python: Classes sau Function API. Voi acoperi ambele în această secțiune.

Cerințe preliminare

Pentru a urma acest tutorial, veți avea nevoie de instalarea Python 3.4. Această versiune de Python vine cu modulul enum în biblioteca standard. Dacă nu ați făcut asta, iată un tutorial care vă va ajuta:

Pentru a urma tutorialul, va trebui să cunoașteți ceva Python. Aceasta include Python de bază și concepte mai avansate de programare orientată pe obiecte, cum ar fi clasele și moștenirea.

#1. Metoda clasei

Prima metodă pentru a crea enumări este utilizarea claselor. Mai întâi importați clasa enum din modulul enum. Apoi, vă creați enumerarea creând o clasă. Această clasă va moșteni din clasa Enum pe care ați importat-o ​​mai devreme.

from enum import Enum

class Direction(Enum):
    NORTH = 0
    EAST = 1
    SOUTH = 2
    WEST = 3

De asemenea, puteți atribui orice valoare dorită membrilor unei enumerari. Iată un exemplu: în loc să atribuim 0, 1, 2 și 3 enumerarii noastre de direcții, le atribuim valorile de titlu corespunzătoare de 0, 90, 180 și 270.

from enum import Enum

class Direction(Enum):
    NORTH = 0
    EAST = 90
    SOUTH = 180
    WEST = 270

Alternativ, folosirea funcției range este o modalitate mai concisă de a genera cele de mai sus. Fragmentul de cod de mai jos demonstrează cum:

from enum import Enum

class Direction(Enum):
    NORTH, EAST, SOUTH, WEST = range(0, 360, 90)

În acest caz, generăm valori folosind funcția interval. Specificăm 0 ca valoare de început, 360 ca valoare finală și 90 ca valoare incrementală. Destructuram valorile din iterabil, similar cu modul în care destructuram tuplurile. Dacă doriți să citiți mai multe despre destructurarea tuplurilor, iată un articol despre tupluri în Python.

  Top 50+ comenzi Linux pe care TREBUIE să le știți

Clasele Enum sunt clase abstracte. Aceasta înseamnă că nu sunt menite să fie instanțiate. În schimb, proprietățile lor, reprezentând membrii enumerați în acest caz, sunt accesate direct.

#2. Metoda funcției

Metoda funcției este o alternativă la metoda subclasării.

from enum import Enum

Direction = Enum("Direction", ["NORTH", "EAST", "SOUTH", "WEST"])

În fragmentul de cod de mai sus, am creat o enumerare numită Direcție. Este accesibil folosind patru membri, pe care i-am oferit ca al doilea argument. Implicit, acestor membri li se dau valori de la 1. Deci Nordul este 1, Estul este 2 și așa mai departe. Acesta este cazul și nu un index bazat pe zero, așa cum era de așteptat, deoarece 0 este fals. Deci, pentru ca toate valorile să fie adevărate, valorile sunt numerotate de la 1.

Alternativ, puteți atribui valori membrilor dvs. trecând membrii ca o listă de tupluri. Fiecare tuplu cuprinde două elemente: numele membrului și valoarea membrului respectiv.

from enum import Enum

Direction = Enum(
    name = "Direction",
    values = [
        ("NORTH", "n"),
        ("EAST", "e"),
        ("SOUTH", "s"),
        ("WEST", "w"),
    ]
)

Veți observa, de asemenea, că am folosit șiruri de caractere în loc de numere întregi când le-am atribuit valori membrilor din exemplul de mai sus. Acest lucru demonstrează că șirurile de caractere sunt la fel de valide ca și numerele întregi atunci când se atribuie valori.

Cum se utilizează Enums

În secțiunea anterioară, am abordat crearea de enumerări și atribuirea de valori membrilor. Această secțiune va acoperi utilizarea enumărilor pentru a accesa și a atribui membri și pentru a verifica egalitatea.

Cum să accesați membrii

Există mai multe metode pentru a accesa membrii unei enumerari. Acestea includ sintaxa punctului, parantezele și sintaxa parantezelor drepte. Iată un exemplu pentru a demonstra cele de mai sus:

from enum import Enum

# Creating an enum
class Day(Enum):
    SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY = range(1, 8)

# Accessing enum members
# 1. Using dot syntax
print(Day.SUNDAY)

# 2. Using square brackets
print(Day["MONDAY"])

# 3. Using the parentheses
print(Day(3))

După accesarea unui membru enum, îl puteți stoca într-o variabilă. Rețineți că accesarea unui membru vă oferă o referință la obiectul membru, nu valoarea sau numele acestuia. Acest lucru este important de reținut în următoarele câteva secțiuni.

  Ce înseamnă bifa pe OnlyFans?

Accesarea numelui și valorii

După cum sa menționat mai devreme, atunci când accesați un membru enum, creați o referință la obiectul membru. Dacă doriți, dintr-un motiv oarecare, să accesați numele sau valoarea obiectului enumerare, puteți utiliza proprietățile nume și valori ale obiectului.

print(Day.SUNDAY.name, Day.SUNDAY.value)

Verificarea egalității

Amintiți-vă că atribuirea unui membru enum unei variabile creează o referință la obiectul membru enumerare. Prin urmare, pentru a verifica dacă o variabilă are un anumit membru enum, folosim operatorul is pentru a verifica dacă membrul enum și variabila indică același obiect.

Iată un exemplu de demonstrat:

today = Day.WEDNESDAY

if today is Day.MONDAY:
    print("It's a Monday, :(")

if today is Day.WEDNESDAY:
    print("Happy Wednesday")

Alternativ, puteți utiliza operatorul ==. Pe superclasele clasei Enum, operatorul == este un wrapper pentru operatorul is. Acest lucru se face folosind supraîncărcarea operatorului. Puteți citi mai multe despre asta în acest articol despre Metode magice. Oricum, iată un exemplu care folosește == în loc de is.

today = Day.WEDNESDAY

if today == Day.MONDAY:
    print("It's a Monday, :(")

if today == Day.WEDNESDAY:
    print("Happy Wednesday")

Cu riscul de a fi repetitive, comparațiile de enumerare verifică identitatea obiectului, nu valorile.

Cuvinte finale

Acest articol a tratat ce sunt enumerarile și de ce sunt utile. De asemenea, am acoperit diferitele metode de a crea enumări prin subclasarea clasei Enum și folosind API-ul funcțional.

În plus, am abordat cum să folosiți enumerări, să accesați valori și să faceți comparații. În continuare, poate doriți să citiți articolul nostru despre enumerările TypeScript.