Saya belajar tali dengan Python. Ketika saya mencoba untuk mencetak objek kelas Foobar
menggunakan print()
fungsi, saya mendapatkan output seperti ini:
<__main__.Foobar instance at 0x7ff2a18c>
Apakah ada cara saya bisa mengatur perilaku pencetakan (atau representasi string ) dari suatu kelas dan objeknya ? Misalnya, ketika saya memanggil print()
objek kelas, saya ingin mencetak anggota datanya dalam format tertentu. Bagaimana cara mencapai ini dengan Python?
Jika Anda terbiasa dengan kelas C ++, hal di atas dapat dicapai untuk standar ostream
dengan menambahkan friend ostream& operator << (ostream&, const Foobar&)
metode untuk kelas.
Seperti yang disebutkan Chris Lutz , ini didefinisikan oleh
__repr__
metode di kelas Anda.Dari dokumentasi
repr()
:Diberikan Tes kelas berikut:
..it akan bertindak dengan cara berikut di shell Python:
Jika tidak ada
__str__
metode yang didefinisikan,print(t)
(atauprint(str(t))
) akan menggunakan hasil__repr__
sebagai gantinyaJika tidak ada
__repr__
metode yang didefinisikan maka default digunakan, yang cukup banyak setara dengan ..sumber
__str__
berbeda dari hasil shell interaktif yang Anda berikan. : P%
format string tidak usang, dari docs.python.org/whatsnew/2.6.html "operator% adalah dilengkapi dengan string yang lebih kuat metode format (format)"%
sudah sangat nyaman.Cara umum yang dapat diterapkan ke kelas apa pun tanpa pemformatan tertentu dapat dilakukan sebagai berikut:
Lalu,
menghasilkan
sumber
Jika Anda berada dalam situasi seperti @Keith, Anda dapat mencoba:
Itu bertentangan dengan apa yang saya anggap gaya yang baik tetapi jika Anda hanya mencoba untuk debug maka itu harus melakukan apa yang Anda inginkan.
sumber
Hanya untuk menambahkan dua sen saya ke jawaban @ dbr, berikut ini adalah contoh bagaimana menerapkan kalimat ini dari dokumentasi resmi yang dikutipnya:
Dengan definisi kelas ini:
Sekarang, mudah membuat serialisasi instance
Test
kelas:Jadi, menjalankan potongan kode terakhir, kita akan mendapatkan:
Tapi, seperti yang saya katakan di komentar terakhir saya: info lebih lanjut ada di sini !
sumber
Anda harus menggunakan
__repr__
. Ini adalah fungsi standar seperti__init__
. Sebagai contoh:sumber
Versi respons yang lebih cantik oleh @ user394430
Menghasilkan daftar nama dan nilai yang bagus secara visual.
Versi yang lebih bagus (terima kasih Ruud) mengurutkan item:
sumber
Untuk Python 3:
Jika format spesifik tidak penting (misalnya untuk debugging), cukup mewarisi dari kelas Cetak di bawah ini. Tidak perlu menulis kode untuk setiap objek.
Terinspirasi oleh jawaban ini
sumber
Sudah ada banyak jawaban di utas ini tetapi tidak ada satupun yang secara khusus membantu saya, saya harus mengerjakannya sendiri, jadi saya harap yang ini sedikit lebih informatif.
Anda hanya perlu memastikan bahwa Anda memiliki tanda kurung di akhir kelas Anda, misalnya:
Berikut adalah contoh kode dari proyek yang sedang saya kerjakan:
Untuk mencetak kelas Hidrogen saya, saya menggunakan yang berikut:
Harap dicatat, ini tidak akan berfungsi tanpa tanda kurung di akhir Hydrogen. Mereka perlu.
Semoga ini bisa membantu, beri tahu saya jika Anda memiliki pertanyaan lagi.
sumber