Како енумови у Питхон-у побољшавају читљивост кода

Енумови су популаран тип података у програмским језицима као што су Ц, Ц++ и Јава. Они вам помажу да пишете код безбедан за тип и читљивији.

У Питхон-у, енуме нису увек биле подржане. Међутим, од верзије 3.4, Питхон сада подржава енуме. Овај чланак је водич о томе како креирати енуме, како их користити и како побољшавају читљивост кода.

Шта су енумови и шта они раде?

Набрајање или набрајање је тип података дефинисан скупом вредности које може да преузме. Овај скуп вредности се назива његовим скупом чланова. Енумови вам омогућавају да уже дефинишете вредности које променљива може имати. Ово вам помаже да пишете код безбедан тип. Такође побољшава читљивост.

Неки услови које треба знати

Док расправљамо о енумима, постоје термини које прво треба да дефинишем, пошто ћемо их често користити. То су чланови и вредности.

  • Чланови: Ово су именоване константе које формирају скуп вредности које припадају набрајању. На пример, листа Даис може да садржи следеће чланове: недеља, понедељак, уторак, итд.
  • Вредности: Ово су вредности које се интерно користе за јасно представљање сваког члана набрајања. Ово ће омогућити поређења. На пример, у набрајању Даис, недеља може да има вредност 0, понедељак вредност 1, уторак вредност 2 итд.

Сада ћемо разговарати о томе како Енумс побољшава ваш код.

Како Енумс побољшава ваш код

Енумови побољшавају ваш код и чине га читљивијим и мање склоним грешкама. Испод су неки од разлога зашто бисте их требали користити:

  • Енуми вам омогућавају да јасно дефинишете које вредности променљива или аргумент функције очекује. Чистите своје намере са аргументом променљиве или функције јасним омогућава људима да с лакоћом разумеју ваш код.
  • Енумови такође чине ваш код самодокументујућим. То значи да не морате да додајете коментаре или документе да бисте навели које вредности функција очекује. Уместо тога, ваш енум специфицира које се вредности очекују.
  • Ово такође омогућава ИДЕ-овима да истакну грешке када проследите нетачне вредности и обезбеде подршку за аутоматско довршавање.
  • Као резултат, ваш код постаје безбедан типовима и мања је вероватноћа да ће произвести грешке током извршавања.
  Како додати улоге реакције у Дисцорд

Затим ћемо разговарати о томе како да креирамо енуме у Питхон-у.

Како направити енуме у Питхон-у

Питхон нема изворну подршку за енуме. Али он пружа енумс модул у стандардној библиотеци. Користићемо тај модул у овом туторијалу. Такође постоје две методе за креирање набрајања у Питхон-у: класе или АПИ функције. Обе ћу покрити у овом одељку.

Предуслови

Да бисте пратили овај водич, биће вам потребан инсталиран Питхон 3.4. Ова верзија Питхона долази са енум модулом у стандардној библиотеци. Ако то нисте урадили, ево водича који ће вам помоћи:

Да бисте пратили туторијал, мораћете да познајете Питхон. Ово укључује основни Питхон и напредније концепте објектно оријентисаног програмирања као што су класе и наслеђивање.

#1. Метода класе

Први метод за креирање енума је коришћење класа. Прво увозите енум класу из енум модула. Затим креирате свој енум креирањем класе. Ова класа ће наследити класу Енум коју сте раније увезли.

from enum import Enum

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

Такође можете доделити било које вредности које желите члановима енума. Ево примера: уместо да доделимо 0, 1, 2 и 3 нашем набрајању упутстава, ми додељујемо њихове одговарајуће вредности наслова од 0, 90, 180 и 270.

from enum import Enum

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

Алтернативно, коришћење функције опсега је сажетији начин генерисања горе наведеног. Исечак кода у наставку показује како:

from enum import Enum

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

У овом случају генеришемо вредности користећи функцију опсега. Наводимо 0 као нашу почетну вредност, 360 као нашу крајњу вредност и 90 као вредност која се повећава. Ми деструктурирамо вредности из итерабле, слично као што деструктурирамо тупле. Ако желите да прочитате више о деструктурирању тупле-а, ево чланка о торкама у Питхон-у.

  Како ресетовати или обрисати предлоге за претрагу на Инстаграму

Енум класе су апстрактне класе. То значи да они нису намењени за инстанцирање. Уместо тога, њиховим особинама, које представљају чланове енума у ​​овом случају, приступа се директно.

#2. Функционални метод

Функционални метод је алтернатива методу поткласирања.

from enum import Enum

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

У горњем исечку кода направили смо енум под називом Дирецтион. Доступан је помоћу четири члана, које смо навели као други аргумент. Подразумевано, овим члановима су дате вредности од 1. Дакле, север је 1, исток је 2 и тако даље. Ово је случај, а не индекс заснован на нули као што се очекивало јер је 0 нетачно. Дакле, да би све вредности биле истините, вредности су нумерисане од 1.

Алтернативно, можете доделити вредности својим члановима тако што ћете проследити чланове као листу торки. Сваки тупле садржи два елемента: име члана и вредност тог члана.

from enum import Enum

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

Такође ћете приметити да сам користио низове уместо целих бројева када сам додељивао вредности члановима у горњем примеру. Ово показује да су стрингови валидни као цели бројеви када се додељују вредности.

Како користити енуме

У претходном одељку смо покрили креирање енума и додељивање вредности члановима. Овај одељак ће покрити коришћење енума за приступ и додељивање чланова и проверу једнакости.

Како приступити члановима

Постоји више метода за приступ члановима енума. То укључује синтаксу тачке, заграде и синтаксу угластих заграда. Ево примера који показује горе наведено:

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))

Након приступа члану енума, можете га сачувати у променљивој. Имајте на уму да вам приступ члану даје референцу на објекат члана, а не његову вредност или име. Ово је важно запамтити у наредних неколико одељака.

  Како прилагодити Аппле ЦарПлаи екран

Приступ имену и вредности

Као што је раније поменуто, када приступите члану енума, креирате референцу на објекат члана. Ако из неког разлога желите да приступите имену или вредности објекта енум, можете користити својства имена и вредности на објекту.

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

Провера једнакости

Подсетимо се да додељивање члана набрајања променљивој ствара референцу на објекат члана набрајања. Стога, да бисмо проверили да ли променљива има одређени члан набрајања, користимо оператор ис да проверимо да ли члан набрајања и променљива указују на исти објекат.

Ево примера за демонстрацију:

today = Day.WEDNESDAY

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

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

Алтернативно, можете користити == оператор. На суперкласама класе Енум, == оператор је омотач за ис оператор. Ово се ради коришћењем преоптерећења оператера. Више о томе можете прочитати у овом чланку о Магијским методама. У сваком случају, ево примера који користи == уместо ис.

today = Day.WEDNESDAY

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

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

Ризикујући да се понављају, поређења енума проверавају идентитет објекта, а не вредности.

Завршне речи

Овај чланак је покрио шта су енумови и зашто су корисни. Такође смо покрили различите методе за креирање енума подкласирањем Енум класе и коришћењем функционалног АПИ-ја.

Поред тога, покрили смо како да користимо енуме, приступне вредности и правимо поређења. Следеће, можда ћете желети да прочитате наш чланак о ТипеСцрипт енумима.