پرسش

تفاوت بین str و repr چیست؟

What is the difference between str and repr?

در پایتون، تفاوت بین str و repr چیه؟ هر دو این‌ها به نظر می‌رسه که وظیفه برگردوندن رشته‌ای از یک آبجکت رو دارن. اما دقیقاً چه تفاوت‌هایی بینشون هست؟ چه زمانی بهتره از str استفاده بشه و چه زمانی از repr؟

1403/05/29
پاسخ
رضا دولتی عاشق برنامه نویسی و هوش مصنوعی!
بیوگرافی رضا دولتی

در پایتون، str و repr هر دو برای تبدیل آبجکت‌ها به رشته استفاده می‌شن، اما هدف و کاربرد هر کدوم متفاوته:

- repr: هدف اصلی repr اینه که یک رشته از آبجکت برگردونه که برای بازسازی دقیق اون آبجکت مناسب باشه. به عبارتی، repr یک نمایش رسمی از آبجکت ارائه می‌ده که اغلب به درد برنامه‌نویس‌ها می‌خوره. اگر از repr برای آبجکتی استفاده کنی، در حالت ایده‌آل با اجرای نتیجه‌ی repr، باید به همون آبجکت اصلی برسی. به همین دلیل، repr بیشتر در محیط‌های توسعه و دیباگ کردن مفیده.

مثال:

  >>> repr(3.14)
  '3.14'

- str: هدف اصلی str اینه که یک رشته از آبجکت برگردونه که برای کاربر نهایی خوانا و قابل درک باشه. str بیشتر برای نمایش دوستانه و غیررسمی آبجکت‌ها استفاده می‌شه و اغلب در موقعیت‌هایی مثل چاپ کردن داده‌ها به کار می‌ره.

مثال:

  >>> str(3.14)
  '3.14'

حالا اینو با یک مثال از آبجکت‌های سفارشی ببینیم:

class MyClass:
    def __repr__(self):
        return 'MyClass()'
    def __str__(self):
        return 'Instance of MyClass'
obj = MyClass()
print(repr(obj))
# output: MyClass()
print(str(obj))   
# output: Instance of MyClass

در این مثال، repr(obj) یک نمایش رسمی از آبجکت obj رو برمی‌گردونه، در حالی که str(obj) یک نمایش دوستانه و کاربرپسند رو برمی‌گردونه.

نتیجه‌گیری:

در نهایت، هر دو str و repr مفید هستند، اما در موقعیت‌های مختلف. اگر می‌خوای آبجکتی رو به گونه‌ای نمایش بدی که به درد بازسازی اون آبجکت بخوره، از repr استفاده کن. اما اگر هدفت نمایش دوستانه‌تر و قابل فهم‌تر برای کاربر نهایی هست، str گزینه مناسبیه.

پاسخ: 1403/05/29
آخرین آپدیت: 1403/07/14