>>classContoh:lulus>>>cetak(str(Contoh()))>>>"/> >>classContoh:lulus>>>cetak(str(Contoh()))>>>">

Rumah >pembangunan bahagian belakang >Tutorial Python >Apakah persamaan dan perbezaan antara __str__ dan __repr__ dalam Python?

Apakah persamaan dan perbezaan antara __str__ dan __repr__ dalam Python?

WBOY
WBOYke hadapan
2023-04-29 19:58:051577semak imbas

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())
''

**__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

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)'
>>>

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))

Hasil keluaran:

Name:Alice
Name:Alice
姓名:Alice

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!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam