دو تا نکته ی ریز درباره ی کلاس int که شاید کمتر بهش توجه کرده باشیم:
برای تبدیل کردن رشته ی "4" که از ورودی میگیریم به عدد 4 میایم از :
n = int("4")
استفاده میکنیم. یه قابلیتی که این کلاس داره اینکه اگه سمت چپ و راست این رشته whitespace باشه هم کار میکنه نیازی نیست strip کنیم.
n = int(" 4 \t \n ")
مثلا فرض کنیم یه فایل test.txt داریم که هر لاینش یه عدد هست با کلی اسپیس قبل و بعد اعداد به صورت :
1
2
3
این دو تا کد زیر رو اجرا کنید تا فرقشونو ببینید :
with open('test.txt') as f:
print([line for line in f])
with open('test.txt') as f:
print([int(line) for line in f])
هم n\ هم اسپیس ها رو هندل میکنه نیاز به strip کردن نیست دیگه.
مورد دوم:
وقتی کلاس int رو صدا میزنید مجیک متد
__int__ رو کال میکنه.
از طرفی شما اگه برای کلاس های خودتون
__index__ رو پیاده سازی کنید میتونید به عنوان index اون آبجکت رو پاس بدید به یه sequence type ای مثل لیست و این متد رو صدا میزنه.
حالا وقتی یه کلاسی ساختید و نمونه ای از اون کلاس رو پاس میدید به int ، کافیه فقط یکی از مجیک متد های
__int__ ، __index__ ، __trunc__ ، رو داشته باشه تا کار کنه.
پس مثلا میشه یه کاری کرد ، برای کلاستون
__index__ رو پیاده سازی کنید هم قابلیت index بودن و داره هم به int تبدیل میشه اگه خواستیم :
class A:
def __index__(self):
print('index is called')
return 2
obj = A()
print(int(obj))
lst = ['a', 'b', 'c', 'd']
print(lst[obj])