0Pricing
Python Academy · Ders

Dondurma ve Karşılaştırma Seçenekleri

Değiştirilemez ve sıralanabilir dataclass'lar oluşturun.

Dondurma ve Karşılaştırma Seçenekleri, CoddyKit'te ücretsiz bir Python Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Python Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Python Academy kursu toplamda 4 dersten oluşur.

Dekoratör Seçenekleri

@dataclass dekoratörü, oluşturduğu metotları denetleyen anahtar sözcük bağımsız değişkenlerini kabul eder. En kullanışlı seçenekler frozen ve order seçenekleridir.

  • frozen=True, örnekleri değişmez yapar.
  • order=True, karşılaştırma işleçleri ekler.

Dondurulmuş Veri Sınıfları

frozen=True kullanıldığında, oluşturulan sınıf yapılandırmadan sonra öznitelik atamasını engeller. Yapılan her girişim FrozenInstanceError oluşturur.

from dataclasses import dataclass, FrozenInstanceError

@dataclass(frozen=True)
class Point:
    x: int
    y: int

p = Point(1, 2)
try:
    p.x = 99
except FrozenInstanceError as e:
    print('Cannot modify:', e)

Değişmezlik Neden Yararlıdır

Değişmez nesneleri anlamak daha kolaydır: değerleri oluşturulduktan sonra hiç değişmez; bu nedenle işlevler ve iş parçacıkları arasında güvenle paylaşılabilirler. Ayrıca sözlük anahtarı ve küme üyesi olarak da güvenlidirler.

Dondurulmuş, Karma Değeri Alınabilir Demektir

Dondurulmuş bir veri sınıfının varsayılan olarak karma değeri alınabilir; bu nedenle örneklerini kümelerde veya sözlük anahtarları olarak kullanabilirsiniz. Değişebilir veri sınıflarının karma değeri alınamaz; bunun için özellikle etkinleştirmeniz gerekir.

from dataclasses import dataclass

@dataclass(frozen=True)
class Point:
    x: int
    y: int

seen = {Point(0, 0), Point(1, 1), Point(0, 0)}
print(len(seen))

Dondurulmuş Değerleri Değiştirme

Dondurulmuş bir örneği değiştiremeyeceğiniz için, değiştirilmiş bir kopya oluşturmak üzere dataclasses.replace() kullanın. Orijinal örnek değişmeden kalır.

from dataclasses import dataclass, replace

@dataclass(frozen=True)
class Point:
    x: int
    y: int

p = Point(1, 2)
q = replace(p, y=99)
print(p)
print(q)

Sıralı Veri Sınıfları

Varsayılan olarak bir veri sınıfı yalnızca == işleciyi destekler. order=True ekleyerek <, <=, > ve >= işleçlerinin de oluşturulmasını sağlayabilirsiniz.

from dataclasses import dataclass

@dataclass(order=True)
class Version:
    major: int
    minor: int

print(Version(1, 2) < Version(1, 5))
print(Version(2, 0) > Version(1, 9))

Sıralama Karşılaştırması Nasıl Yapar

Sıralama, alanları tanımlandıkları sırayla soldan sağa bir demet olarak karşılaştırır. İlk alan en belirleyici alandır.

from dataclasses import dataclass

@dataclass(order=True)
class Version:
    major: int
    minor: int

# major compared first, then minor
print(Version(1, 9) < Version(2, 0))

Veri Sınıfı Örneklerini Sıralama

Sıralı veri sınıfları karşılaştırma işleçlerini tanımladığı için, bunlardan oluşan bir listeyi doğrudan sorted() ile sıralayabilirsiniz.

from dataclasses import dataclass

@dataclass(order=True)
class Score:
    points: int
    name: str

data = [Score(50, 'B'), Score(90, 'A'), Score(70, 'C')]
for s in sorted(data):
    print(s)

Sıralama Anahtarını Denetleme

Doğal alan sırası yerine başka bir ölçüte göre sıralamak için field(init=False) ile gizli bir sıralama alanını ilk sıraya koyup bu alanı __post_init__ içinde ayarlayın. Diğer alanları compare=False ile karşılaştırmanın dışında bırakabilirsiniz.

from dataclasses import dataclass, field

@dataclass(order=True)
class Item:
    sort_index: int = field(init=False, repr=False)
    name: str = field(compare=False, default='')
    priority: int = 0

    def __post_init__(self):
        self.sort_index = self.priority

print(Item(name='b', priority=2) > Item(name='a', priority=1))

Dondurulmuş ve Sıralı Birlikte

Seçenekleri birleştirebilirsiniz. Dondurulmuş, sıralı bir veri sınıfı; anahtarlar, sürüm numaraları veya koordinatlar için ideal, değişmez ve karşılaştırılabilir bir değer türüdür.

from dataclasses import dataclass

@dataclass(frozen=True, order=True)
class SemVer:
    major: int
    minor: int
    patch: int

versions = {SemVer(1, 0, 0): 'stable'}
print(SemVer(1, 0, 0) < SemVer(1, 1, 0))
print(versions[SemVer(1, 0, 0)])

Eşitlik ve Varsayılan Değer

eq seçeneği, __eq__ yönteminin oluşturulup oluşturulmayacağını denetler. Varsayılan değeri True şeklindedir. Sıralama eşitlik üzerine kurulduğu için order=True seçeneğinin eq=True gerektirdiğine dikkat edin.

from dataclasses import dataclass

@dataclass(eq=True)
class Tag:
    name: str

print(Tag('x') == Tag('x'))
print(Tag('x') == Tag('y'))

Hızlı Kontrol

Dondurulmuş bir veri sınıfı örneğindeki bir alana değer atarsanız ne olur?

Özet

Değişmez, sıralı veri sınıfları oluşturmayı öğrendiniz.

  • frozen=True değiştirmeyi engeller ve örneklerin karma değerinin alınabilmesini sağlar.
  • Değiştirilmiş kopyalar için replace() kullanın.
  • order=True, alanları bir demet olarak karşılaştıran karşılaştırma işleçlerini oluşturur.
  • Sağlam değer türleri için ikisini birleştirin.

Sıkça Sorulan Sorular

“Dondurma ve Karşılaştırma Seçenekleri” dersi ücretsiz mi?

Evet — “Dondurma ve Karşılaştırma Seçenekleri” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Python Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Python Academy kursu toplamda 4 dersten oluşur.

“Dondurma ve Karşılaştırma Seçenekleri” dersinde ne öğreneceğim?

Değiştirilemez ve sıralanabilir dataclass'lar oluşturun. Python Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Python Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Python Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.

“Dondurma ve Karşılaştırma Seçenekleri” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Python Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Python Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Dataclass Tanımlama
  2. Varsayılan Değerler ve field()
  3. Dondurma ve Karşılaştırma Seçenekleri
  4. attrs Kütüphanesi
← Python Academy Sayfasına Dön