Apakah persamaan dan perbezaan antara __str__ dan __repr__ dalam Python?

WBOY
Lepaskan: 2023-04-29 19:58:05
ke hadapan
1566 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 Nyatakan dalam bentuk rentetan untuk memudahkan pengecaman kami. Ini ialah "perwakilan rentetan". repr() menggunakan kaedah khas __repr__ untuk mendapatkan perwakilan rentetan objek. Jika __repr__ tidak dilaksanakan, apabila kita mencetak contoh vektor ke konsol, rentetan yang terhasil mungkin .

>>> class Example: pass

>>> print(str(Example()))>>> print(repr(Example()))>>> 
>>> str(Example)
""
>>> repr(Example())
''
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 aksara "tidak formal" atau terbentuk dengan baik daripada objek Perwakilan rentetan. Nilai pulangan mestilah objek rentetan.

  • __repr__: dipanggil oleh fungsi terbina dalam repr() 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__().

Adakah anda keliru tentang format formal dan tidak formal? Tidak mengapa, mari lihat:

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, hasil pengembalian panggilan str() dan repr() Ia adalah sama,

Dan apabila y ialah jenis rentetan, hasil repr(y) ialah perwakilan rentetan "formal", manakala hasil str(y) ialah "tidak formal". str() membolehkan kami memahami kandungan objek dengan paling cepat dan lebih mudah dibaca.

2.__str__ boleh dibaca dan matlamat __repr__ adalah 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

Dapat dilihat bahawa repr() boleh memaparkan jenis, nilai dan maklumat lain objek dengan lebih baik dan penerangan objek jelas.

Ia 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_

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

Hasil keluaran:

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

Atas ialah kandungan terperinci Apakah persamaan dan perbezaan antara __str__ dan __repr__ dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:yisu.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