0Pricing
Python Academy · Pelajaran

Pustaka attrs

Bandingkan attrs dengan dataclasses

Pustaka attrs adalah pelajaran Python Academy gratis di CoddyKit. Ini adalah pelajaran 4 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.

Apa Itu attrs?

attrs adalah pustaka pihak ketiga yang memelopori gagasan membuat kelas dari atribut, bertahun-tahun sebelum dataclasses masuk ke pustaka standar. Modul standar dataclasses terinspirasi langsung olehnya.

  • attrs harus dipasang secara terpisah: pip install attrs.
  • attrs menawarkan lebih banyak fitur daripada dataclasses.
  • dataclasses sudah tersedia di dalam Python dan mencukupi sebagian besar kebutuhan sehari-hari.

API attrs Modern

attrs modern menggunakan @define dan field() dari ruang nama attrs. Bentuknya sangat mirip dengan dataclass.

from attrs import define, field

@define
class Point:
    x: int
    y: int

p = Point(1, 2)
print(p)

Slot Secara Default

Perbedaan besar: kelas @define otomatis menggunakan __slots__. Ini mengurangi penggunaan memori dan mencegah penambahan atribut yang tidak dideklarasikan secara tidak sengaja. Dataclass biasa menggunakan __dict__ kecuali Anda meneruskan slots=True (Python 3.10+).

Validator Bawaan

attrs menyediakan validator siap pakai. Sebuah atribut dapat mendeklarasikan validator yang dijalankan saat konstruksi dan menimbulkan kesalahan jika nilainya tidak valid. Dataclasses tidak memiliki validasi bawaan; Anda harus menulisnya sendiri di __post_init__.

from attrs import define, field
from attrs.validators import instance_of

@define
class User:
    age: int = field(validator=instance_of(int))

User(30)        # ok
User('oops')    # raises TypeError

Konverter

Konverter mengubah nilai masukan sebelum disimpan. Misalnya, konverter dapat mengubah string menjadi bilangan bulat secara otomatis. Ini adalah fitur lain yang tidak dimiliki dataclasses.

from attrs import define, field

@define
class Item:
    price: int = field(converter=int)

i = Item('42')   # stored as the integer 42
print(i.price)

Padanan Dataclass

Berikut gagasan yang sama menggunakan pustaka standar. Validasi dan konversi harus ditulis secara manual di __post_init__, karena dataclasses tidak menyediakan kait per atribut.

from dataclasses import dataclass

@dataclass
class Item:
    price: int

    def __post_init__(self):
        self.price = int(self.price)

print(Item('42'))

asdict di Keduanya

Kedua pustaka menyediakan fungsi bantuan asdict. Fungsi dari dataclass berada di dataclasses, sedangkan fungsi dari attrs berada di attrs. Perilakunya hampir sama.

from dataclasses import dataclass, asdict

@dataclass
class Point:
    x: int
    y: int

print(asdict(Point(1, 2)))

Frozen di attrs

attrs juga mendukung sifat tidak dapat diubah. Gunakan @frozen (singkatan dari @define(frozen=True)) untuk membuat instans hanya-baca, serupa dengan @dataclass(frozen=True).

from attrs import frozen

@frozen
class Point:
    x: int
    y: int

p = Point(1, 2)
print(p)
# p.x = 9  would raise FrozenInstanceError

Perbandingan Fitur

Berikut perbandingannya:

  • dataclasses: pustaka standar, tidak perlu pemasangan, dan mencakup kebutuhan dasar.
  • attrs: validator, konverter, slot secara default, serta lebih banyak opsi konfigurasi.
  • Keduanya membuat __init__, __repr__, dan __eq__.

Mana yang Sebaiknya Anda Gunakan?

Pilih dataclasses untuk penampung data sederhana tanpa dependensi tambahan. Pilih attrs jika Anda memerlukan validator, konverter, atau konfigurasi yang lebih kaya dan tidak keberatan menambahkan dependensi. Banyak proyek memulai dengan dataclasses dan baru berpindah jika kebutuhannya sudah melampaui kemampuan tersebut.

Warisan Bersama

Karena dataclasses banyak meminjam dari attrs, migrasi di antara keduanya biasanya bersifat mekanis: tukar impor dan dekoratornya, lalu sesuaikan validator atau konverternya. Jika Anda mengetahui salah satunya, Anda akan langsung mengenali yang lain.

  • @define memiliki padanan @dataclass.
  • attrs.field memiliki padanan dataclasses.field.
  • Validator dipindahkan ke __post_init__ saat beralih ke dataclasses.

Pemeriksaan Singkat

Kemampuan apa yang ditawarkan attrs tetapi tidak disediakan secara bawaan oleh modul dataclasses standar?

Rangkuman

Anda telah membandingkan attrs dengan dataclasses.

  • attrs menginspirasi dataclasses dan menawarkan lebih banyak fitur.
  • attrs menambahkan validator, konverter, dan slot secara default.
  • dataclasses sudah tersedia di dalam Python dan tidak perlu dipasang.
  • Pilih alat paling sederhana yang memenuhi kebutuhan Anda.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Pustaka attrs” gratis?

Ya — teks lengkap “Pustaka attrs” 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 “Pustaka attrs”?

Bandingkan attrs dengan dataclasses 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 4 dari 4.

Berapa lama pelajaran “Pustaka attrs” 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

  1. Mendefinisikan Dataclass
  2. Nilai Default dan field()
  3. Opsi Pembekuan dan Perbandingan
  4. Pustaka attrs
← Kembali ke Python Academy