تابع __str__

در قسمت قبل وقتی میخواستیم شی کارت را پرینت کنیم، آدرس آن را در حافظه بر میگرداند. زمانی که میخواهیم مشخص کنیم که شی های ما زمان پرینت شدن یا هنگام تبدیل به str چگونه رفتار کنند، از تابع __str__ استفاده میکنیم. زمان تبدیل شدن شی به string یا وقتی میخواهیم شی را پرینت کنیم این تابع اجرا میشود.

این تابع را به کلاس کارتی که قبلا نوشته بودیم اضافه میکنیم. به این صورت که دو لیست تعریف میکنیم که اسم ها را به ترتیب درون خود نگهداری میکند. در نهایت یک رشته را return میکنیم:

def __str__(self):
    suit_list = ["Clubs", "Diamonds", "Hearts", "Spades"]
    rank_list = [0,"Ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King"]
    return (rank_list[self.rank]+" of "+suit_list[self.suit])

از اندیس لیست ها کمک گرفته ایم تا اعداد را به اسم ها نسبت دهیم.

در rank_list یه ۰ اضافه در اولین جایگاه قرار داده شده به این دلیل که شمارش کارت ها از عدد ۱ شروع شوند و نه ۰٫ یعنی زمانی که کارت من عدد ۱ را به جای rank دارد، اندیس یک آن لیست هم عدد یک باشد.

حالا که مشکل شی ما با پرینت شدن حل شد وقت آن رسیده که برنامه را امتحان کنیم و نتیجه را ببینیم:

c1 = Card(1, 13)
c2 = Card(0, 1)
print(c1)
print(c2)
# King of Diamonds
# Ace of Clubs

 

ارسال دیدگاه

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *