Materi
Tanpa bantuan, print(objek) mencetak sesuatu seperti <__main__.Ruangan object at 0x10a3f2d50>: nama kelas dan alamat memori, tidak ada isinya. Dua method khusus mengubahnya. __str__ dipanggil oleh print() dan str(), dan boleh berbentuk ringkas untuk dibaca orang. __repr__ dipanggil oleh repr(); referensi model data Python meminta hasilnya, bila memungkinkan, berbentuk ekspresi Python yang bisa membuat ulang objeknya, karena tampilan ini dipakai saat memeriksa program. Bila kelas hanya punya __repr__, print memakainya juga.
class Ruangan:
def __init__(self, nama, kapasitas):
self.nama = nama
self.kapasitas = kapasitas
def __str__(self):
return f"{self.nama} ({self.kapasitas} orang)"
def __repr__(self):
return f"Ruangan({self.nama!r}, {self.kapasitas})"
r = Ruangan("Aula", 80)
print(r) # Aula (80 orang)
print(repr(r)) # Ruangan('Aula', 80)
print([r]) # [Ruangan('Aula', 80)]
print(f"{1250000:,}".replace(",", ".")) # 1.250.000Penanda !r di f-string menampilkan nilai lewat repr(), sehingga teks muncul lengkap dengan tanda kutipnya. Baris terakhir contoh menunjukkan cara menulis Rupiah: pemisah ribuan :, menghasilkan koma, lalu komanya diganti titik. List, tuple, dan dict selalu menampilkan isinya dengan __repr__, bukan __str__.
Perbandingan == juga bisa diatur. Tanpa __eq__, dua objek hanya dianggap sama bila keduanya objek yang persis sama, sehingga dua barang berkode sama yang dibuat terpisah tetap tidak sama. __eq__(self, other) mengembalikan True atau False; bila other bukan objek yang dikenalnya, kembalikan NotImplemented supaya Python mencoba cara lain.