تبدیل رشته (هر کلاس به repr نیاز دارد)
وقتی یک کلاس سفارشی را در پایتون تعریف می کنید و سپس سعی می کنید یکی از آنها را چاپ کنید نمونه های آن را به کنسول (یا آن را در یک جلسه مترجم بازرسی کنید)، شما یک نتیجه نسبتا رضایت بخش دریافت کنید. تبدیل پیشفرض «به رشته». رفتار اساسی و فاقد جزئیات است:def __init__(self, color, mileage): class Car: self.color = color >>> my_car = Car(‘red’, 37281) >>> print(my_car) <__console__.Car object at 0x109b73da0> >>> my_car <__console__.Car object at 0x109b73da0>به طور پیش فرض تمام چیزی که دریافت می کنید یک رشته است که شامل نام کلاس و شناسه آن است نمونه شی (که آدرس حافظه شی در CPython است.) این از هیچی بهتر است، اما خیلی هم مفید نیست. ممکن است با چاپ مستقیم در ادای احترام کلاس یا حتی با افزودن یک سفارشی to_string () سعی در حل این مشکل داشته باشید. روش کلاس های شما:>>> print(my_car.color, my_car.mileage) red 37281ایده کلی در اینجا ایده درستی است – اما قراردادها را نادیده می گیرد و مکانیسمهای داخلی که پایتون برای مدیریت نحوه نمایش اشیا به عنوان رشتهها استفاده میکند. به جای ساخت ماشین آلات تبدیل به رشته خود، این کار را خواهید کرد بهتر است متدهای str و repr “dunder” را به کلاس خود اضافه کنید. آنها روش پایتونیک برای کنترل نحوه تبدیل اشیاء به رشته در موقعیت های مختلف هستند بیایید نگاهی به نحوه عملکرد این روش ها در عمل بیندازیم. برای شروع، ما یک متد str را به کلاس Car که ear lier تعریف کردیم اضافه می کنیم: class Car: self.mileage = mileage def __init__(self, color, mileage): self.mileage = mileage def __str__(self): self.color = color return f’a {self.color} car’وقتی اکنون سعی میکنید نمونهای از خودرو را چاپ یا بازرسی کنید، یک مورد دریافت خواهید کرد نتیجه متفاوت و کمی بهبود یافته:>>> print(my_car) >>> my_car = Car(‘red’, 37281) ‘a red car’ <__console__.Car object at 0x109ca24e0>بازرسی شی خودرو در کنسول همچنان نتیجه قبلی حاوی شناسه شی را به ما می دهد. اما چاپ شی منجر به رشته ای که با روش str که اضافه کردیم برگردانده شد. >>> my_car و هنگامی که شما سعی می کنید یک شی را به یک رشته تبدیل کنید فراخوانی می شود وسایل مختلف موجود:>>> print(my_car) a red car>>> str(my_car) ‘a red car’ str یکی از روشهای “dunder” (دو خط زیر) پایتون است ‘a red car’>>> ‘{}’.format(my_car)
قوانین ارسال دیدگاه در سایت