Traffine I/O

Bahasa Indonesia

2023-02-24

Dataclasses di Python

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:

  1. Impor dekorator dataclass dari modul dataclasses.
python
from dataclasses import dataclass
  1. Tentukan kelas Anda dan tambahkan dekorator @dataclass di atasnya.
python
@dataclass
class MyClass:
    name: str
    age: int
    email: str
  1. 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, dan email.

  2. Opsional, Anda dapat menambahkan nilai default ke variabel-variabel ini dengan memberi nilai pada definisi kelas.

python
@dataclass
class MyClass:
    name: str = 'John'
    age: int = 25
    email: str = 'john@example.com'
  1. 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.
python
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:

python
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:

python
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:

python
@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.

python
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.

python
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.

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!