Nilai Default dan field()
Atur nilai default dan gunakan opsi field().
Nilai Default dan field() adalah pelajaran Python Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Python Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Python Academy mencakup 4 pelajaran total.
Memberikan Nilai Bawaan pada Field
Seperti parameter fungsi, field kelas data dapat memiliki nilai bawaan. Field dengan nilai bawaan boleh dihilangkan saat membuat instans.
from dataclasses import dataclass
@dataclass
class Server:
host: str
port: int = 8080
print(Server('localhost'))
print(Server('example.com', 443))Urutan Itu Penting
Field dengan nilai bawaan harus diletakkan setelah field tanpa nilai bawaan, persis seperti argumen fungsi. Jika tidak, Python akan memunculkan TypeError saat kelas didefinisikan.
from dataclasses import dataclass
@dataclass
class User:
name: str # required
active: bool = True # optional
print(User('Alice'))Jebakan Nilai Bawaan yang Dapat Diubah
Anda tidak dapat menggunakan objek yang dapat diubah, seperti list atau kamus, sebagai nilai bawaan langsung. Semua instans akan berbagi objek yang sama. Python mendeteksi hal ini dan memunculkan ValueError untuk melindungi Anda.
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=...)
Untuk memberikan nilai bawaan yang dapat diubah, gunakan field(default_factory=...). Factory dipanggil untuk setiap instans baru, sehingga setiap instans memperoleh objek baru miliknya sendiri.
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 vs default_factory
Gunakan field(default=...) untuk nilai yang tidak dapat diubah jika Anda juga memerlukan opsi field() lainnya. Gunakan default_factory untuk segala sesuatu yang dapat diubah. Anda tidak dapat memberikan keduanya sekaligus.
from dataclasses import dataclass, field
@dataclass
class Config:
retries: int = field(default=3)
tags: list = field(default_factory=list)
print(Config())Mengecualikan Field dari repr
Opsi repr=False menyembunyikan sebuah field dari __repr__ yang dibuat secara otomatis. Ini berguna untuk rahasia atau buffer internal berukuran besar.
from dataclasses import dataclass, field
@dataclass
class Account:
user: str
token: str = field(repr=False, default='secret')
print(Account('alice'))Mengecualikan Field dari Perbandingan
Dengan compare=False, sebuah field diabaikan oleh __eq__ yang dibuat secara otomatis (dan oleh pengurutan). Dua instans dapat dianggap sama meskipun field tersebut berbeda.
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))Field init=False
Menetapkan init=False membuat sebuah field tidak disertakan dalam __init__. Biasanya Anda menggabungkannya dengan nilai bawaan atau menetapkannya dalam __post_init__.
from dataclasses import dataclass, field
@dataclass
class Circle:
radius: float
area: float = field(init=False, default=0.0)
c = Circle(2.0)
print(c)__post_init__ untuk Nilai Turunan
Definisikan __post_init__ untuk menjalankan kode tepat setelah __init__ yang dibuat secara otomatis. Ini adalah tempat yang tepat untuk menghitung field yang diturunkan dari field lainnya.
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))Menyimpan Metadata
Argumen metadata melampirkan pemetaan apa pun ke sebuah field. Python mengabaikannya, tetapi alat dan kode Anda sendiri dapat membacanya sebagai dokumentasi atau petunjuk validasi.
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)Menggabungkan Opsi field()
Opsi-opsi tersebut dapat digabungkan. Satu field dapat disembunyikan dari repr, tidak disertakan dalam perbandingan, dan memiliki nilai bawaan secara bersamaan.
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'))Pemeriksaan Singkat
Bagaimana cara memberikan list kosong sebagai nilai bawaan pada field kelas data?
Rangkuman
Anda telah mempelajari cara menetapkan nilai bawaan dan menggunakan opsi field().
- Field dengan nilai bawaan diletakkan setelah field yang wajib diisi.
- Gunakan
default_factoryuntuk nilai bawaan yang dapat diubah. repr,compare,init, danmetadatamengatur setiap field.__post_init__menghitung nilai turunan.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Nilai Default dan field()” gratis?
Ya — teks lengkap “Nilai Default dan field()” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Python Academy, upgrade ke CoddyKit PRO. Kursus Python Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Nilai Default dan field()”?
Atur nilai default dan gunakan opsi field(). Kamu berlatih Python Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Python Academy?
Tidak diperlukan pengalaman sebelumnya. Python Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “Nilai Default dan field()” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Python Academy ini?
Ya. Setiap pelajaran Python Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Mendefinisikan Dataclass
- Nilai Default dan field()
- Opsi Pembekuan dan Perbandingan
- Pustaka attrs