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__
untukprint()
danstr()
.
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, sepertiprint()
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.