Python'da Numaralandırmalar

Python'da Numaralandırmalar

Bu makale, Python'da numaralandırmaların ne olduğunu açıklar.

YouTube Video

Python'da Numaralandırmalar

Python'daki enum, sabitleri tanımlamak, okunabilirliği artırmak ve kodlama hatalarını önlemek için özel bir sınıftır.

Enum nedir?

Enum (numaralandırmanın kısaltması), adlandırılmış sabitler kümesini tanımlamak için kullanılan bir sınıftır. Genellikle ilgili sabitleri bir araya gruplamak için kullanılır. Örneğin, renkleri, haftanın günlerini veya yönleri temsil etmek için uygundur.

Neden Enum kullanmalıyız?

Enum kullanmak için birkaç neden vardır.

  • Geliştirilmiş okunabilirlik: Adlandırılmış sabitler kullanmak kodu daha sezgisel hale getirir.
  • Hata önleme: Sabit değerlerin değiştirilmesini veya yanlış kullanılmasını önler.
  • Gruplama: İlgili sabitleri tek bir sınıfta düzenleyerek yapılandırılmış verileri temsil eder.

Enum'un Temel Kullanımı

enum kullanmak için enum modülünü içe aktarın ve bir sınıf tanımlayın. Sınıf, Enum'dan miras almalı ve sabit olarak işlemek istediğiniz değerleri tanımlamalıdır.

Enum için Temel Bir Örnek

 1from enum import Enum
 2
 3class Color(Enum):
 4    RED = 1
 5    GREEN = 2
 6    BLUE = 3
 7
 8# Usage of Enum
 9print(Color.RED)        # Color.RED
10print(Color.RED.name)   # RED
11print(Color.RED.value)  # 1

Bu örnekte, üç değer içeren Color adlı bir Enum sınıfı tanımlıyoruz. Her bir isme name özelliği ile, ilişkili değere ise value özelliği ile erişilebilir.

Enum'ların Karşılaştırılması

Enum üyeleri, ya isimleriyle ya da değerleriyle karşılaştırılabilir. Kimlik ve eşitliği kontrol etmek için is operatörünü veya == operatörünü kullanabilirsiniz.

Karşılaştırma Örneği

 1from enum import Enum
 2
 3class Direction(Enum):
 4    NORTH = 1
 5    SOUTH = 2
 6    EAST = 3
 7    WEST = 4
 8
 9# Equality comparison
10print(Direction.NORTH == Direction.SOUTH)  # False
11print(Direction.NORTH == Direction.NORTH)  # True
12
13# Identity comparison using is
14print(Direction.NORTH is Direction.SOUTH)  # False
15print(Direction.NORTH is Direction.NORTH)  # True

Enum kullanılarak == ve is ile yapılan karşılaştırmalar burada gösterilmektedir. Enum, aynı ada ve değerlere sahip nesneleri doğru bir şekilde karşılaştırmak için tasarlanmıştır.

auto() ile otomatik değer atama

Enum üyelerine otomatik olarak değer atamak istiyorsanız, enum.auto() kullanabilirsiniz. auto(), Python'un değerleri otomatik olarak atamasını sağlar ve geliştiricilerin manuel olarak belirtme gereksinimini ortadan kaldırır.

auto() örneği

 1from enum import Enum, auto
 2
 3class Animal(Enum):
 4    DOG = auto()
 5    CAT = auto()
 6    MOUSE = auto()
 7
 8# Check the values of Enum
 9print(Animal.DOG.value)    # 1
10print(Animal.CAT.value)    # 2
11print(Animal.MOUSE.value)  # 3

Bu örnekte, auto() kullanımı değerlerin açıkça belirtilmesi gereğini ortadan kaldırır ve kodu daha özlü hale getirir.

Enum üyelerine birden fazla değer atama

Enum üyeleri aynı zamanda demetler (tuple) gibi birden fazla değeri de içerebilir. Bu, her üyenin ek ilişkili bilgiler içermesini sağlar.

Demetler kullanılarak örnek

 1from enum import Enum
 2
 3class Status(Enum):
 4    ACTIVE = (1, 'Active user')
 5    INACTIVE = (2, 'Inactive user')
 6    SUSPENDED = (3, 'Suspended user')
 7
 8# Accessing Enum members
 9print(Status.ACTIVE.name)    # ACTIVE
10print(Status.ACTIVE.value)   # (1, 'Active user')
11print(Status.ACTIVE.value[1])  # Active user

Bu örnekte, Status sınıfının üyeleri, durumu ve açıklamayı temsil eden ikişer değere sahiptir. Bu, bir Enum üyesini birden fazla bilgi parçasıyla ilişkilendirmek istediğinizde yararlıdır.

Enum kullanılarak bayraklar oluşturma

Python'un enum modülü, bit bayrakları gibi kullanılabilecek bir Flag sınıfı içerir. Flag kullanmak, birden fazla durumu bir arada yönetmenizi sağlar.

Flag örneği

 1from enum import Flag, auto
 2
 3class Permission(Flag):
 4    READ = auto()
 5    WRITE = auto()
 6    EXECUTE = auto()
 7
 8# Combining flags
 9permission = Permission.READ | Permission.WRITE
10print(permission)                 # Permission.READ|WRITE
11print(Permission.EXECUTE in permission)  # False

Bu örnekte, birden fazla izni birleştirmek için bit düzeyinde işlemler kullanılır. Flag kullanmak, birden fazla durumu kısa ve öz bir şekilde yönetmenizi sağlar.

Enum kullanırken dikkate alınması gereken noktalar

Enum değişmezliği

Enum üyeleri değiştirilemezdir. Tanımlandıktan sonra, isimleri veya değerleri değiştirilemez. Bu, sabitler olarak tutarlılığı sağlamak için önemli bir özelliktir.

1from enum import Enum
2
3class Days(Enum):
4    MONDAY = 1
5    TUESDAY = 2
6
7# Example of immutability
8# Days.MONDAY = 3  # AttributeError: Cannot reassign members.

Yinelenen üyelerin yasaklanması

Enum üyelerinin benzersiz isimlere ve değerlere sahip olması gerekir. Aynı değerlere izin verilse bile, Python otomatik olarak ilk üyeyi önceliklendirir.

Özet

Python'un enum modülü, sabit setlerini gruplamak, okunabilirliği artırmak ve kod tutarlılığını sağlamak için oldukça faydalı bir araçtır. auto() kullanarak otomatik değer atanmasından, bit bayrakları olarak kullanılmasına kadar temel kullanımdan çeşitli kullanımlara olanak sağlanır.

Enum'u doğru bir şekilde anlamak ve ustalaşmak, kod kalitesini artırabilir ve hataların önlenmesine yardımcı olabilir.

Yukarıdaki makaleyi, YouTube kanalımızda Visual Studio Code'u kullanarak takip edebilirsiniz. Lütfen YouTube kanalını da kontrol edin.

YouTube Video