Apa itu Dataclasses
Dataclasses adalah fitur relatif baru di Python yang diperkenalkan pada versi 3.7. Mereka adalah cara yang nyaman untuk membuat kelas yang digunakan terutama untuk menyimpan data, tanpa perlu menulis banyak kode boilerplate. Dengan dataclasses, Anda dapat mendefinisikan kelas hanya dengan beberapa baris kode dan secara otomatis mendapatkan metode seperti init()
, repr()
, dan eq()
yang dihasilkan untuk Anda.
Dataclass dibuat menggunakan dekorator @dataclass
, yang secara otomatis menghasilkan metode seperti init()
dan repr()
. Anda juga dapat menentukan nilai default untuk atribut dan menambahkan metode ke kelas seperti kelas Python lainnya.
Dataclasses terutama berguna untuk bekerja dengan data terstruktur seperti file JSON atau CSV, di mana Anda perlu mewakili data dalam format terstruktur tetapi tidak ingin menulis banyak kode yang berulang. Mereka juga dapat berguna dalam situasi di mana Anda perlu bekerja dengan sejumlah besar data dan ingin cara yang sederhana untuk menyimpan dan memanipulasinya.
Secara ringkas, dataclasses adalah cara yang kuat dan nyaman untuk membuat kelas untuk menyimpan dan bekerja dengan data di Python. Mereka membantu mengurangi jumlah kode boilerplate yang perlu Anda tulis, sehingga memudahkan untuk bekerja dengan data terstruktur dengan cara Pythonic.
Cara Mumbuat Dataclass di Python
Dataclasses adalah fitur yang kuat di Python yang dapat membantu Anda dengan cepat mendefinisikan dan membuat kelas dengan kode boilerplate minimal. Berikut adalah panduan langkah demi langkah tentang cara menggunakan dataclasses di Python:
- Impor dekorator dataclass dari modul
dataclasses
.
from dataclasses import dataclass
- Tentukan kelas Anda dan tambahkan dekorator
@dataclass
di atasnya.
@dataclass
class MyClass:
name: str
age: int
email: str
-
Tentukan variabel yang ingin Anda sertakan dalam kelas sebagai variabel kelas di dalam blok
@dataclass
. Pada contoh di atas, kita telah menentukan tiga variabel:name
,age
, danemail
. -
Opsional, Anda dapat menambahkan nilai default ke variabel-variabel ini dengan memberi nilai pada definisi kelas.
@dataclass
class MyClass:
name: str = 'John'
age: int = 25
email: str = 'john@example.com'
- Sekarang Anda dapat membuat instance kelas Anda menggunakan nama kelas dan memberikan nilai untuk variabel-variabel tersebut. Anda juga dapat mengakses variabel-variabel tersebut menggunakan notasi titik.
person = MyClass(name='Jane', age=30, email='jane@example.com')
print(person.name) # prints 'Jane'
Dengan menggunakan dataclasses, Anda dapat menghindari menulis kode berulang dan membuat kode Anda lebih ringkas dan mudah dibaca. Dataclasses juga menyediakan fungsionalitas tambahan seperti secara otomatis menghasilkan metode __init__
, metode __repr__
, dan banyak lagi.
Pewarisan dengan Dataclasses
Di Python, pewarisan memungkinkan Anda untuk membuat kelas-kelas baru yang merupakan versi modifikasi dari kelas-kelas yang sudah ada. Dataclasses juga dapat digunakan dengan pewarisan untuk membuat subclass yang mewarisi properti dan metode dari kelas induknya.
Untuk membuat subclass dengan pewarisan dataclass, Anda dapat mendefinisikan dataclass baru dan menentukan kelas induknya dalam tanda kurung setelah nama kelas. Sebagai contoh:
from dataclasses import dataclass
@dataclass
class Person:
name: str
age: int
@dataclass
class Employee(Person):
id: int
department: str
Pada contoh ini, terdapat kelas induk bernama Person
dan subclass bernama Employee
. Subclass Employee
mewarisi properti name
dan age
dari kelas induknya.
Untuk membuat instansi kelas Employee
, kita dapat menyediakan nilai untuk semua properti, termasuk properti yang diwarisi:
employee = Employee(name='John', age=30, id=1234, department='Sales')
Pada contoh ini, kita membuat instansi Employee
yang disebut employee
dan menyediakan nilai untuk semua properti yang didefinisikan pada kelas Person
dan Employee
.
Selain mewarisi properti, subclass juga dapat menimpa properti dan metode yang diwarisi dari kelas induknya. Sebagai contoh, jika kita ingin mengubah implementasi metode __str__
pada kelas Employee
, kita dapat melakukannya dengan mendefinisikan metode tersebut pada subclass:
@dataclass
class Employee(Person):
id: int
department: str
def __str__(self):
return f'{self.name} works in {self.department}'
Pada contoh ini, kita menimpa metode __str__
yang diwarisi dari kelas Person
dan memberikan implementasi baru yang mencakup properti department
.
Secara keseluruhan, pewarisan dengan dataclasses di Python memungkinkan Anda untuk membuat subclass yang mewarisi properti dan metode dari kelas induknya, serta menimpa atau menambah properti dan metode baru sesuai kebutuhan. Hal ini dapat membantu Anda menulis kode yang lebih efisien dan terorganisir.
Pemrosesan Post-Init dalam Dataclasses
dataclasses juga mendukung pemrosesan post-init menggunakan metode __post_init__
. Metode ini dipanggil setelah objek diinisialisasi dan dapat digunakan untuk melakukan pemrosesan tambahan pada atribut objek.
from dataclasses import dataclass
@dataclass
class Person:
name: str
age: int = 0
def __post_init__(self):
if self.age < 0:
raise ValueError('Age cannot be negative.')
Pada contoh di atas, kita telah menambahkan metode __post_init__
ke dataclass Person
. Metode ini memeriksa apakah nilai age
negatif dan akan menimbulkan kesalahan ValueError
jika iya.
person1 = Person('John', 25)
person2 = Person('Jane', -5) # Raises ValueError
Ketika kita membuat person1
dengan nilai usia positif, semuanya berjalan seperti yang diharapkan. Namun, ketika kita membuat person2
dengan nilai usia negatif, metode __post_init__
menimbulkan ValueError
.