ຄວາມແຕກຕ່າງລະຫວ່າງ __repr__ ແລະ __str__ ໃນ Python ແມ່ນຫຍັງ?


ຕອບ 1:

ຂ້າພະເຈົ້າຈະພະຍາຍາມອະທິບາຍດ້ວຍວິທີ ສຳ ຮອງ. _str_ ແລະ _repr_ ທັງສອງມີຄວາມແຕກຕ່າງເລັກນ້ອຍ ສຳ ລັບການເປັນຕົວແທນຂອງສາຍ. ມີ repr (ລາຍລະອຽດດ້ານວິຊາການດ້ານວັດຖຸ) ທ່ານສາມາດໂທຫາຟັງຊັນ python eval () ເພື່ອປະເມີນການສະແດງອອກຂອງ Python. ຢ່າງໃດກໍ່ຕາມ, ນີ້ແມ່ນບໍ່ເປັນໄປໄດ້.

>>> repr (4) == str (4) True >>> repr ('ງ່າຍດາຍ hain ... ') == str ('ງ່າຍດາຍ hain ... ') ທີ່ບໍ່ຖືກຕ້ອງ

ດຽວນີ້ບຸກຄົນຕ້ອງໄດ້ເຫັນຜົນໄດ້ຮັບເພື່ອເຂົ້າໃຈພຶດຕິ ກຳ ນີ້

>>> s = 'ປ່າ ທຳ ມະດາ ... ' >>> ຜູ້ຕາງ ໜ້າ "" ປ່າໄມ້ທີ່ລຽບງ່າຍ ... '">>> str (s)" ປ່າ ທຳ ມະດາ ... ">>> str (4)' 4 '>>> Repr (4)' 4 '

ການໃຊ້ຟັງຊັນປະເມີນຜົນ Python ເພື່ອເຂົ້າໃຈ _repr_ ແລະ _str_

>>> eval (repr ('hain ງ່າຍໆ ... ')) "grove ງ່າຍໆ ... " >>> eval (str ('hain ງ່າຍໆ ... ')) tracing (ໂທສຸດທ້າຍ): file " ", ເສັ້ນ 1, ໃນ ແຟ້ມ " ", ເສັ້ນ 1, ໃນ NameError: ຊື່ 'ງ່າຍດາຍ ... ' ບໍ່ໄດ້ຖືກ ກຳ ນົດ

ໜ້າ ທີ່ນີ້ຄວນໃຊ້ຢູ່ໃສ? ໃນ Python, _repr_ ຖືກໃຊ້ເພື່ອລະບຸຂໍ້ມູນວັດຖຸ, ແລະ _str_ ແມ່ນໃຊ້ ສຳ ລັບການພິມຫລືເບິ່ງ.

  • ພະຍາຍາມປະຕິບັດ __repr__ ສຳ ລັບແຕ່ລະຊັ້ນຮຽນທີ່ປະຕິບັດເພື່ອໃຫ້ລາຍລະອຽດດ້ານວິຊາການກ່ຽວກັບວັດຖຸ. ພະຍາຍາມຈັດຕັ້ງປະຕິບັດ __str__ ສຳ ລັບຊັ້ນຮຽນທີ່ທ່ານຄິດວ່າສາມາດອ່ານໄດ້ງ່າຍ

ຂ້ອຍພົບເຫັນຕົວຢ່າງນີ້ທາງອິນເຕີເນັດ

>>> ນຳ ເຂົ້າຈາກ datetime datetime >>> ດຽວນີ້ = datetime.now () >>> repr (ດຽວນີ້) "datetime.datetime (2013, 2, 5, 4, 43, 11, 673075)" >>> str (ດຽວນີ້ ) 'ປີ 2013-02-05 04: 43: 11.673075'

ຂ້ອຍຫວັງວ່າເຈົ້າຈະເຂົ້າໃຈສິ່ງນັ້ນ.


ຕອບ 2:

ສຳ ລັບ __repr__, ຖ້າເປັນໄປໄດ້, ສິ່ງນີ້ຄວນເບິ່ງຄືກັບການສະແດງອອກ Python ທີ່ຖືກຕ້ອງເຊິ່ງສາມາດ ນຳ ໃຊ້ເພື່ອສ້າງສິ່ງຂອງ ໃໝ່ ທີ່ມີມູນຄ່າດຽວກັນ (ໃນສະພາບແວດລ້ອມທີ່ ເໝາະ ສົມ). ຖ້າເປັນໄປບໍ່ໄດ້, ເຊືອກຂອງແບບຟອມ <.. ຄຳ ອະທິບາຍທີ່ເປັນປະໂຫຍດ ... > ຄວນສົ່ງຄືນ. ""

ໂດຍສະເພາະ, __str__ ສຳ ລັບສາຍ“ xyzzy” ຈະແມ່ນສາຍ: xyzzy

ໃນຂະນະທີ່ __repr__ ສຳ ລັບຊ່ອຍແນ່ຈະແມ່ນຊ່ອຍແນ່: 'xyzzy'


ຕອບ 3:

ສຳ ລັບ __repr__, ຖ້າເປັນໄປໄດ້, ສິ່ງນີ້ຄວນເບິ່ງຄືກັບການສະແດງອອກ Python ທີ່ຖືກຕ້ອງເຊິ່ງສາມາດ ນຳ ໃຊ້ເພື່ອສ້າງສິ່ງຂອງ ໃໝ່ ທີ່ມີມູນຄ່າດຽວກັນ (ໃນສະພາບແວດລ້ອມທີ່ ເໝາະ ສົມ). ຖ້າເປັນໄປບໍ່ໄດ້, ເຊືອກຂອງແບບຟອມ <.. ຄຳ ອະທິບາຍທີ່ເປັນປະໂຫຍດ ... > ຄວນສົ່ງຄືນ. ""

ໂດຍສະເພາະ, __str__ ສຳ ລັບສາຍ“ xyzzy” ຈະແມ່ນສາຍ: xyzzy

ໃນຂະນະທີ່ __repr__ ສຳ ລັບຊ່ອຍແນ່ຈະແມ່ນຊ່ອຍແນ່: 'xyzzy'