Magic Methods یا Dunder Methods که به صورت فارسی می شود متد های جادویی و منظور از داندر(Dunder) دو تا آندر لاین(__) می باشد. که در شی گرایی پایتون در دسترس هستند. مجیک متد ها یک سری متد ها هستند که در کلاس ها می توانید به آن ها دسترسی پیدا کتید که در هر کدام از این مجیک متدها برایمان یک کار خاصی انجام می دهند که در ادامه با آن آشنا خواهیم شد.در پایتون مجیک متد هایی مثل : __init__
و __str__
و __add__
و .. وجود دارد.
اگر میخواهید پایتون را بهتر یاد بگیرید، می توانید از وب سایت آنوفل با ارائه آموزش مقدماتی پایتون استفاده کنید.
1.__init__ :
این متد اینگونه عمل می کند که وقتی از کلاس یک شی ایجاد کردید، این متد ابتدا صدا زده می شود و هنگامی که شما آبجکت(Object) می سازید ، مستقیما آرگومان ها را به کلاس ارسال می کند.
برای مثال ما در زیر یک کلاس داریم میخواهیم وقتی از آن یک آبجکت ساخته شد یک سری ویژگی (property) حتما وارد بشه :
#create Class
class Machine:
""" Class doc string """
def __init__(self,brand,model):
self.brand = brand
self.model = model
#create an instance
mustang = Machine("Mustang",1990)
bmw = Machine("BMW",2023)
2.__str__ :
این متد اینگونه عمل می کند که اگر بخواهید که یک آبجکت را مستقیم در دستور print بخواهید چاپش کنید. برای مثال :
#create Class
class Machine:
""" Class doc string """
def __init__(self,brand,model):
self.brand = brand
self.model = model
def __str__(self):
return self.brand
#create an instance
mustang = Machine("Mustang",1990)
print(mustang) #output => mustang
3.__new__ :
با استفاده از این متد شما می توانید نمونه هایی که می سازید را کنترل کنید.و قبل از متد __init__ صدا زده می شود. برای مثال:
#create Class
class Machine:
""" Class doc string """
def __new__(cls):
print("your car : ")
return super(Machine,cls).__new__(cls)
def __init__(self):
print("mustang")
Machine()
#output => "your car : mustang"
4.__call__ :
وقتی از این متد در کلاس استقاده می کنید به نمونه های آن این تونایی را می دهد که همانند یک تابع رفتار کنند (به صورت تابع فراخوانی کنیم).
class Machine():
def __init__(self, brand, model):
self.brand = brand
self.model = model
def __call__(self):
print(f"brand: {self.brand}, model: {self.model}")
mustang = Mustang("Mustang", 1990)
mustang() # output => brand: Mustang, model: 1990
مجیک متد های دیگری نیز وجود دارند که می توانید در داکیومنت های پایتون پیدا کنید.