ویژگیهای دیگر
متدهای ویژه (Dunder / Magic Methods)
- متدهایی با دو آندرلاین در ابتدا و انتهای نام (
__name__) - پایتون خودش در موقعیتهای خاص این متدها رو صدا میزنه
| متد | صدا زده میشه وقتی | مثال |
|---|---|---|
__init__ |
ساخت شیء | Dog("Rex") |
__str__ |
print(obj) یا str(obj) |
نمایش خوانا برای انسان |
__repr__ |
نمایش رسمی/دیباگی شیء | معمولاً برای برنامهنویس |
__len__ |
len(obj) |
طول شیء |
__eq__ |
obj1 == obj2 |
مقایسه برابری |
__add__ |
obj1 + obj2 |
جمع دو شیء |
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
def __str__(self):
return f"({self.x}, {self.y})"
def __eq__(self, other):
return self.x == other.x and self.y == other.y
def __add__(self, other):
return Point(
self.x + other.x,
self.y + other.y,
)
p1 = Point(1, 2)
p2 = Point(3, 4)
print(p1)
print(p1 == p2)
print(p1 + p2)(1, 2)
False
(4, 6)
متد کلاسی و متد استاتیک
| نوع | دکوراتور | پارامتر اول | دسترسی به |
|---|---|---|---|
| متد نمونه (معمولی) | — | self |
دادههای شیء |
| متد کلاسی | @classmethod |
cls |
خود کلاس |
| متد استاتیک | @staticmethod |
ندارد | نه شیء نه کلاس، فقط تابع مرتبط |
True
2
کلاسهای انتزاعی و Duck Typing
- در پایتون معمولاً نوع دقیق شیء مهم نیست، مهم اینه که رفتار موردنیاز رو داشته باشه
- به این ویژگی Duck Typing میگن: “اگه مثل اردک راه بره و مثل اردک صدا کنه، اردکه”
بازبینی خودکار اشیاء
dir(obj): لیست همهی متدها و ویژگیهای یک شیءvars(obj)یاobj.__dict__: دیکشنری ویژگیهای نمونه (instance attributes)
{'x': 1, 'y': 2}