Dataclass Tanımlama
Gereksiz kodları kaldırmak için @dataclass kullanın.
Dataclass Tanımlama, CoddyKit'te ücretsiz bir Python Academy dersidir. Bu, 4 dersinin 1. 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.
Veri Sınıfları Neden Kullanılır?
Çoğunlukla veri tutan bir sınıf yazdığınızda aynı şablon kodu tekrar tekrar yazarsınız: bir __init__, bir __repr__ ve bir __eq__. veri sınıfları modülü, basit alan bildirimlerinden bunların tamamını sizin için oluşturur.
- Yazılacak ve okunacak daha az kod.
__init__içinde yazım hatası yapma olasılığının azalması.- Python 3.7'den beri standart kitaplıkta yerleşik olması.
Eski Yöntem
Burada bir noktayı saklayan sıradan bir sınıf bulunmaktadır. Yalnızca iki sayıyı saklamak için ne kadar çok kod yazılması gerektiğine dikkat edin.
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
p = Point(1, 2)
print(p.x, p.y)@dataclass Dekoratörü
Bir sınıfın üstüne @dataclass uygulayın ve alanları tür açıklamalarıyla bildirin. Python, __init__ yöntemini otomatik olarak oluşturur.
from dataclasses import dataclass
@dataclass
class Point:
x: int
y: int
p = Point(1, 2)
print(p.x, p.y)Otomatik __repr__
Veri sınıfları ayrıca okunabilir bir __repr__ oluşturur; böylece nesneyi yazdırdığınızda bellek adresi yerine alanları gösterilir.
from dataclasses import dataclass
@dataclass
class Point:
x: int
y: int
print(Point(3, 4))Otomatik __eq__
Bir veri sınıfının iki örneği, tüm alanları eşit olduğunda eşit kabul edilir. __eq__ yöntemini elle yazmanız gerekmez.
from dataclasses import dataclass
@dataclass
class Point:
x: int
y: int
print(Point(1, 2) == Point(1, 2))
print(Point(1, 2) == Point(9, 9))Tür Açıklamaları Zorunludur
Her alanın bir tür açıklaması olmalıdır. Veri sınıfı mekanizmasına bu adın bir alan olduğunu bildiren şey açıklamadır. Açıklama olmadan yapılan yalın bir atama, alan değil, normal bir sınıf özniteliği olur.
from dataclasses import dataclass
@dataclass
class User:
name: str
age: int
u = User('Alice', 30)
print(u)Metot Ekleme
Bir veri sınıfı hâlâ normal bir sınıftır. Oluşturulan alanları kullanan sıradan metotlar ekleyebilirsiniz.
from dataclasses import dataclass
@dataclass
class Rectangle:
width: int
height: int
def area(self):
return self.width * self.height
r = Rectangle(3, 4)
print(r.area())Alanları Değiştirme
Varsayılan olarak veri sınıfı örnekleri değiştirilebilirdir; bu nedenle oluşturulduktan sonra alanları normal öznitelikler gibi yeniden atayabilirsiniz.
from dataclasses import dataclass
@dataclass
class Counter:
value: int
c = Counter(0)
c.value += 5
print(c.value)asdict ve astuple
asdict() ve astuple() yardımcıları bir örneği sözlüğe veya demete dönüştürür; bu, serileştirme için kullanışlıdır.
from dataclasses import dataclass, asdict, astuple
@dataclass
class Point:
x: int
y: int
p = Point(1, 2)
print(asdict(p))
print(astuple(p))İç İçe Veri Sınıfları
Bir veri sınıfı alanının kendisi başka bir veri sınıfı olabilir. Oluşturulan __repr__ ve asdict(), iç içe yapılarda özyinelemeli olarak çalışır.
from dataclasses import dataclass, asdict
@dataclass
class Address:
city: str
@dataclass
class Person:
name: str
address: Address
p = Person('Bob', Address('Paris'))
print(asdict(p))Veri Sınıfları Ne Zaman Kullanılır
Bir sınıf çoğunlukla ilişkili değerleri bir arada grupluyorsa veri sınıfını tercih edin.
- Yapılandırma nesneleri.
- Bir işlevden döndürülen kayıtlar.
- Koordinatlar veya para gibi basit değer türleri.
Veriden çok davranışın ön planda olduğu sınıflar için normal bir sınıf daha anlaşılır olabilir.
Kısa Kontrol
@dataclass dekoratörü otomatik olarak ne oluşturur?
Özet
Şablon kodu ortadan kaldırmak için @dataclass kullanmayı öğrendiniz.
- Alanları tür açıklamalarıyla bildirin.
__init__,__repr__ve__eq__oluşturulur.- Örnekleri dönüştürmek için
asdict()veastuple()kullanın. - Yine de metot ekleyebilir ve veri sınıflarını iç içe yerleştirebilirsiniz.
Sıkça Sorulan Sorular
“Dataclass Tanımlama” dersi ücretsiz mi?
Evet — “Dataclass Tanımlama” 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.
“Dataclass Tanımlama” dersinde ne öğreneceğim?
Gereksiz kodları kaldırmak için @dataclass kullanın. 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 1. dersidir.
“Dataclass Tanımlama” 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