Apps Artificial Intelligence CSS DevOps Go JavaScript Laravel Linux MongoDB MySQL PHP Python Rust Vue

Memahami Perbedaan `__str__` dan `__repr__` di Python

2 min read .
Memahami Perbedaan `__str__` dan `__repr__` di Python

Di Python, metode __str__ dan __repr__ sangat penting untuk menyesuaikan bagaimana objek direpresentasikan sebagai string. Kedua metode ini sering membingungkan, tetapi mereka memiliki tujuan berbeda dan digunakan dalam konteks yang berbeda. Memahami perbedaan __str__ dan __repr__ penting untuk debugging yang efektif dan output yang ramah pengguna dalam aplikasi Python Anda. Panduan ini akan menjelaskan apa itu __str__ dan __repr__, perbedaannya, serta kapan harus menggunakan masing-masing.

1. Apa Itu __str__?

Metode __str__ digunakan untuk mendefinisikan representasi string yang mudah dibaca oleh manusia dari suatu objek. Tujuannya adalah memberikan string yang informatif dan ramah pengguna. Saat menggunakan fungsi print() atau str(), Python memanggil metode __str__.

Contoh:

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __str__(self):
        return f"Person(name={self.name}, age={self.age})"

p = Person("Alice", 30)
print(p)  # Output: Person(name=Alice, age=30)

Di sini, __str__ memberikan representasi yang mudah dipahami dari objek Person.

2. Apa Itu __repr__?

Metode __repr__ dimaksudkan untuk memberikan representasi string yang tidak ambigu dan detail dari suatu objek, terutama untuk tujuan debugging dan pengembangan. Idealnya, output dari __repr__ bisa digunakan dengan eval() untuk membuat objek yang sama (jika memungkinkan). Saat menggunakan fungsi repr() atau mengecek objek di interactive session, Python memanggil __repr__.

Contoh:

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __repr__(self):
        return f"Person(name='{self.name}', age={self.age})"

p = Person("Alice", 30)
print(repr(p))  # Output: Person(name='Alice', age=30)

Di sini, __repr__ memberikan representasi yang rinci, berguna untuk debugging.

3. Perbedaan Kunci Antara __str__ dan __repr__

  • Tujuan:

    • __str__: Menyediakan representasi string yang ramah pengguna dan mudah dibaca.
    • __repr__: Menyediakan representasi string yang jelas dan detail untuk debugging.
  • Perilaku Default: Jika hanya mendefinisikan __repr__ tanpa __str__, Python akan menggunakan __repr__ untuk print() dan str().

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __repr__(self):
        return f"Person(name='{self.name}', age={self.age})"

p = Person("Alice", 30)
print(p)       # Output: Person(name='Alice', age=30)
print(str(p))  # Output: Person(name='Alice', age=30)
  • Penggunaan:

    • __str__: Untuk menampilkan objek ke pengguna dengan format yang mudah dibaca.
    • __repr__: Untuk melihat detail internal objek saat debugging.

4. Praktik Terbaik Mengimplementasikan __str__ dan __repr__

  • Implementasikan Kedua Metode: Jika Anda ingin output ramah pengguna sekaligus informasi detail untuk debugging, buat kedua metode dalam kelas.
  • Buat __repr__ Tidak Ambigu: Pastikan output __repr__ jelas dan, bila memungkinkan, bisa digunakan untuk membuat ulang objek.
  • Uji Metode Anda: Pastikan __str__ dan __repr__ memberikan output yang diharapkan dalam berbagai konteks, seperti print() dan debugging.

5. Contoh: Menyesuaikan Representasi String

class Book:
    def __init__(self, title, author):
        self.title = title
        self.author = author

    def __str__(self):
        return f"'{self.title}' by {self.author}"

    def __repr__(self):
        return f"Book(title='{self.title}', author='{self.author}')"

b = Book("1984", "George Orwell")
print(b)        # Output: '1984' by George Orwell
print(repr(b))  # Output: Book(title='1984', author='George Orwell')

Di sini, __str__ memberikan format yang ramah pembaca, sedangkan __repr__ memberikan representasi detail untuk debugging.

6. Kesimpulan

Memahami perbedaan antara __str__ dan __repr__ penting untuk membuat representasi objek yang jelas dan ramah pengguna. Gunakan __str__ untuk output yang mudah dibaca, dan __repr__ untuk informasi detail yang membantu debugging. Implementasi yang efektif dari kedua metode ini meningkatkan kualitas, keterbacaan, dan profesionalisme kode Python Anda.

Lihat Juga

chevron-up