نامهای دوروآندرلاین (__x__) قراردادِ زباناند، نه جادو: هر کدام یک پروتکل را فعال میکند.
| متد | فعال میکند | نکته |
|---|---|---|
__repr__ | نمایش توسعهدهنده | ترجیحاً شبیه سازنده |
__str__ | نمایش کاربر (print) | اگر نبود، از __repr__ استفاده میشود |
__eq__ | == | اگر تعریف کردی، به __hash__ هم فکر کن |
__len__ | len() | باید نامنفی برگرداند |
__add__ | + | شیء تازه برگردان، نه تغییر درجا |
__iter__ | حلقهٔ for | دروازهٔ تکرارپذیرشدن |
class Book:
def __init__(self, title, pages):
self.title, self.pages = title, pages
def __repr__(self):
return f"Book({self.title!r}, {self.pages!r})"
def __eq__(self, other):
return (self.title, self.pages) == (other.title, other.pages)