0Pricing
Python Academy · Ders

Varsayılan Değerler ve field()

Varsayılan değerleri ayarlayın ve field() seçeneklerini kullanın.

Varsayılan Değerler ve field(), CoddyKit'te ücretsiz bir Python Academy dersidir. Bu, 4 dersinin 2. 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.

Alanlara Varsayılan Değer Verme

Tıpkı işlev parametreleri gibi, veri sınıfı alanlarının da varsayılan değerleri olabilir. Varsayılan değeri olan bir alan, örnek oluşturulurken atlanabilir.

from dataclasses import dataclass

@dataclass
class Server:
    host: str
    port: int = 8080

print(Server('localhost'))
print(Server('example.com', 443))

Sıra Önemlidir

Varsayılan değerli alanlar, varsayılan değeri olmayan alanlardan sonra gelmelidir; tıpkı işlev bağımsız değişkenlerinde olduğu gibi. Aksi takdirde Python, sınıf tanımlanırken bir TypeError oluşturur.

from dataclasses import dataclass

@dataclass
class User:
    name: str       # required
    active: bool = True   # optional

print(User('Alice'))

Değiştirilebilir Varsayılan Değer Tuzağı

Liste veya sözlük gibi değiştirilebilir bir nesneyi doğrudan varsayılan değer olarak kullanamazsınız. Tüm örnekler aynı nesneyi paylaşırdı. Python bunu algılar ve sizi korumak için bir ValueError oluşturur.

from dataclasses import dataclass
from typing import List

# This raises ValueError at class definition time:
try:
    @dataclass
    class Bad:
        items: List[int] = []
except ValueError as e:
    print('Error:', e)

field(default_factory=...)

Değiştirilebilir bir varsayılan değer vermek için field(default_factory=...) kullanın. Fabrika her yeni örnek için çağrılır; böylece her örnek kendine ait yeni bir nesne alır.

from dataclasses import dataclass, field
from typing import List

@dataclass
class Cart:
    items: List[str] = field(default_factory=list)

a = Cart()
a.items.append('apple')
b = Cart()
print(a.items, b.items)

default ve default_factory Karşılaştırması

Başka field() seçeneklerine de ihtiyaç duyduğunuzda değişmez değerler için field(default=...) kullanın. Değiştirilebilir her şey için default_factory kullanın. İkisini aynı anda aktaramazsınız.

from dataclasses import dataclass, field

@dataclass
class Config:
    retries: int = field(default=3)
    tags: list = field(default_factory=list)

print(Config())

Bir Alanı repr'den Dışlama

repr=False seçeneği, bir alanı oluşturulan __repr__ içinden gizler. Bu, gizli bilgiler veya büyük dahili arabellekler için kullanışlıdır.

from dataclasses import dataclass, field

@dataclass
class Account:
    user: str
    token: str = field(repr=False, default='secret')

print(Account('alice'))

Bir Alanı Karşılaştırmadan Dışlama

compare=False kullanıldığında, bir alan oluşturulan __eq__ tarafından (ve sıralamada) yok sayılır. Bu alan farklı olsa bile iki örnek eşit olabilir.

from dataclasses import dataclass, field

@dataclass
class Event:
    name: str
    timestamp: float = field(compare=False, default=0.0)

print(Event('login', 1.0) == Event('login', 99.0))

init=False Alanları

init=False ayarı, bir alanı __init__ dışında tutar. Genellikle bunu bir varsayılan değerle birleştirir veya alanı __post_init__ içinde ayarlarsınız.

from dataclasses import dataclass, field

@dataclass
class Circle:
    radius: float
    area: float = field(init=False, default=0.0)

c = Circle(2.0)
print(c)

Türetilmiş Değerler için __post_init__

Oluşturulan __init__ yönteminin hemen ardından kod çalıştırmak için __post_init__ tanımlayın. Diğer alanlardan türetilen değerleri hesaplamak için en uygun yer burasıdır.

from dataclasses import dataclass, field

@dataclass
class Circle:
    radius: float
    area: float = field(init=False, default=0.0)

    def __post_init__(self):
        self.area = 3.14159 * self.radius ** 2

print(Circle(2.0))

Üst Veri Saklama

metadata bağımsız değişkeni, bir alana isteğe bağlı bir eşleme ekler. Python bunu yok sayar; ancak araçlar ve kendi kodunuz, belgeleme veya doğrulama ipuçları için bu eşlemeyi okuyabilir.

from dataclasses import dataclass, field, fields

@dataclass
class Product:
    price: float = field(metadata={'unit': 'USD'})

for f in fields(Product):
    print(f.name, f.metadata)

field() Seçeneklerini Birleştirme

Seçenekler bir arada kullanılabilir. Tek bir alan kendisini repr'den gizleyebilir, karşılaştırmanın dışında kalabilir ve aynı anda bir varsayılan değer taşıyabilir.

from dataclasses import dataclass, field

@dataclass
class Session:
    user: str
    token: str = field(default='x', repr=False, compare=False)

print(Session('alice'))
print(Session('alice') == Session('alice', token='different'))

Kısa Kontrol

Bir veri sınıfı alanına varsayılan olarak boş bir listeyi nasıl vermelisiniz?

Özet

Varsayılan değerleri ayarlamayı ve field() seçeneklerini kullanmayı öğrendiniz.

  • Varsayılan değerli alanlar zorunlu alanlardan sonra gelir.
  • Değiştirilebilir varsayılan değerler için default_factory kullanın.
  • repr, compare, init ve metadata her alanı ayarlamanızı sağlar.
  • __post_init__, türetilmiş değerleri hesaplar.

Sıkça Sorulan Sorular

“Varsayılan Değerler ve field()” dersi ücretsiz mi?

Evet — “Varsayılan Değerler ve field()” 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.

“Varsayılan Değerler ve field()” dersinde ne öğreneceğim?

Varsayılan değerleri ayarlayın ve field() seçeneklerini 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 2. dersidir.

“Varsayılan Değerler ve field()” 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