چرا هر کلاس به repr نیاز دارد
از repr هنگام جستجوی str. بنابراین، من آن را توصیه می کنم شما همیشه حداقل یک متد repr را به کلاس های خود اضافه می کنید. این اراده تضمین یک نتیجه تبدیل رشته مفید تقریبا در همه موارد، با a اگر متد str را اضافه نکنید، پایتون به نتیجه بازمی گردد در اینجا نحوه اضافه کردن پشتیبانی از تبدیل رشته به کلاس های خود آورده شده است سریع و کارآمد. برای کلاس خودروی ما ممکن است با آن شروع کنیم repr زیر:def __repr__(self): حداقل کار اجرایی return f’Car({self.color!r}, {self.mileage!r})’لطفاً توجه داشته باشید که من از پرچم تبدیل !r استفاده میکنم تا مطمئن شوم که رشته خروجی از repr(self.color) و repr (self.mileage) استفاده میکند. این به خوبی کار می کند، اما یک نقطه ضعف این است که ما کلاس را تکرار کرده ایم نام داخل رشته فرمت ترفندی که میتوانید در اینجا برای جلوگیری از این تکرار استفاده کنید، استفاده از ویژگی class.name شی است که همیشه نام کلاس را به عنوان یک رشته منعکس می کند. از str (self.color) و str (self.mileage). وقتی نام کلاس تغییر می کند این باعث می شود که به راحتی به آن پایبند باشید اصل خود را تکرار نکنید (DRY):def __repr__(خود): مزیت این است که شما نیازی به تغییر پیاده سازی repr ندارید f'{self.color!r}، {self.mileage!r})’)نقطه ضعف این پیاده سازی این است که رشته قالب کاملاً مناسب است طولانی و غیر قابل تحمل اما با قالب بندی دقیق، می توانید کد را حفظ کنید زیبا و سازگار با PEP 8. بازگشت (f'{self.__class__.__name__}(‘ ما شی را بررسی می کنیم یا مستقیماً روی آن () repr را فرا می خوانیم:>>> repr(my_car) با اجرای repr بالا، نتیجه مفیدی می گیریم وقتی ‘Car(red, 37281)’چاپ شی یا فراخوانی str() روی آن همان رشته را برمی گرداند زیرا اجرای پیش فرض str به سادگی repr را فراخوانی می کند:’Car(red, 37281)’ >>> print(my_car) >>> str(my_car) ‘Car(red, 37281)’من معتقدم این رویکرد بیشترین ارزش را با مقدار متوسطی فراهم می کند می تواند بدون تامل زیاد اعمال شود. به همین دلیل من همیشه از کارهای اجرایی این نیز یک رویکرد نسبتاً بیسکویت است که سعی کنید یک پیاده سازی repr اساسی را به کلاس های من اضافه کنید. پیاده سازی str:class Car: در اینجا یک مثال کامل برای Python 3، از جمله اختیاری است self.color = color self.mileage = mileage def __repr__(self): def __init__(self, color, mileage): return (f'{self.__class__.__name__}(‘ def __str__(self): f'{self.color!r}, {self.mileage!r})’) return f’a {self.color} car’در پایتون 3 یک نوع داده برای نمایش متن در سراسر تخته وجود دارد: خ. دارای کاراکترهای یونیکد است و می تواند بیشتر شخصیت های جهان را نشان دهد سیستم های نوشتاری تفاوت Python 2.x: unicode Python 2.x از یک مدل داده متفاوت برای رشته ها استفاده می کند نوع برای نمایش متن: str، که به کاراکتر ASCII محدود می شود با توجه به این تفاوت، روش dunder دیگری نیز در آن وجود دارد ترکیبی برای کنترل تبدیل رشته در پایتون 2: unicode. مجموعه و یونیکد که معادل str Python 3 است. در پایتون 2، str بایت ها را برمی گرداند، در حالی که unicode برمی گرداند.
قوانین ارسال دیدگاه در سایت