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=Truedeğ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
- Dataclass Tanımlama
- Varsayılan Değerler ve field()
- Dondurma ve Karşılaştırma Seçenekleri
- attrs Kütüphanesi