Pemahaman menyeluruh tentang __str__ dan __repr__ dalam Python dalam satu artikel

PHPz
Lepaskan: 2023-04-10 14:51:10
ke hadapan
2177 orang telah melayarinya

Apakah persamaan dan perbezaan antara __str__ dan __repr__?

Perwakilan rentetan

Kita semua tahu bahawa fungsi terbina dalam Python repr()​ boleh menukar objek dalam bentuk rentetan Express supaya kita dapat mengenal pastinya dengan mudah. Ini ialah "perwakilan rentetan". repr() memperoleh perwakilan rentetan objek melalui kaedah khas __repr__​. Jika __repr__ tidak dilaksanakan, apabila kita mencetak contoh vektor ke konsol, rentetan yang terhasil mungkin .

>>> class Example: pass

>>> print(str(Example()))
<__main__.Example object at 0x10a514f98>
>>> print(repr(Example()))
<__main__.Example object at 0x1088eb438>
>>> 
>>> str(Example)
"<class '__main__.Example'>"
>>> repr(Example())
'<__main__.Example object at 0x1088eb438>'
Salin selepas log masuk

**__str__**​vs.**__repr__**

Seterusnya mari kita lihat persamaan dan perbezaan antara **__str__** dan **__repr__** . Menurut dokumentasi Python rasmi:

  • __str__​: Dipanggil oleh str(objek) dan fungsi terbina dalam format() dan print() untuk menjana perwakilan rentetan "tidak rasmi" atau diformat dengan baik daripada sesuatu objek. Nilai pulangan mestilah objek rentetan.
  • __repr__​: dipanggil oleh fungsi terbina dalam repr() dan digunakan untuk mengeluarkan perwakilan rentetan "rasmi" sesuatu objek. Nilai pulangan mestilah objek rentetan Kaedah ini biasanya digunakan untuk penyahpepijatan. Pelaksanaan lalai yang ditakrifkan untuk objek jenis terbina dalam memanggil objek.__repr__().

Anda keliru tentang format formal dan tidak formal, bukan? Tidak mengapa, mari teruskan:

1 Kedua-duanya boleh mengeluarkan objek

>>> x = 4
>>> repr(x)
'4'
>>> str(x)
'4'
>>> y = 'pythonic'
>>> repr(y)
"'pythonic'"
>>> str(y)
'pythonic'

>>> z = '4'
>>> repr(z)
"'4'"
>>> str(z)# 注意,此处的输出结果形式跟str(x)一样,但x和z的类型并不一样
'4'
>>> str(x) == str(z)
True
>>> repr(x) == repr(z)
False
>>> str(4) == str("4")
True
>>> repr(4) == repr("4")
False
Salin selepas log masuk

Apabila x=4, apabila x ialah jenis integer, panggil str()​ dan repr() The. hasil pulangan "daripada. str() membolehkan kami memahami kandungan objek dengan paling cepat dan lebih mudah dibaca.

2.__str__​ boleh dibaca dan matlamat __repr__ adalah jelas

Dapat dilihat bahawa repr() boleh memaparkan jenis, nilai dan maklumat lain objek dengan lebih baik Diterangkan dengan jelas.
>>> import datetime
>>> d = datetime.datetime.now()
>>> str(d)
'2020-04-04 20:47:46.525245'
>>> repr(d)
'datetime.datetime(2020, 4, 4, 20, 47, 46, 525245)'
>>>
Salin selepas log masuk

dipanggil apabila fungsi str()​ digunakan, atau apabila objek dicetak menggunakan fungsi cetakan, dan rentetan yang dipulangkan adalah lebih mesra kepada pengguna akhir.

3. Tulis semula __repr__​, yang juga akan menggunakan __str_

Hasil keluaran:
class Student():

def __init__(self, name):
self.name = name

def __str__(self):
return "Name:" + self.name

def __repr__(self):
return "姓名:" + self.name


class_one = Student("Alice")
print(class_one)
print(str(class_one))
print(repr(class_one))
Salin selepas log masuk

Ringkasan
Name:Alice
Name:Alice
姓名:Alice
Salin selepas log masuk

Mata biasa : Kedua-duanya adalah digunakan untuk mengeluarkan objek

Perbezaan:

__str__​ Sasaran boleh dibaca, __str__() tidak dijangka mengembalikan ungkapan Python yang sah, tetapi ia boleh Gunakan lebih mudah atau lebih huraian yang tepat.
  1. Matlamat __repr__ adalah jelas Rentetan yang dikembalikan harus tepat, tidak jelas dan menyatakan sebanyak mungkin cara untuk mencipta objek bercetak menggunakan kod.
  2. Menggunakan kaedah __str__​ bekas untuk memasukkan __repr__​

Atas ialah kandungan terperinci Pemahaman menyeluruh tentang __str__ dan __repr__ dalam Python dalam satu artikel. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:51cto.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan