متد مخفی در پایتون متدی است که با دو خط زیر (_) شروع میشود. متدهای مخفی برای مخفی کردن جزئیات پیادهسازی کلاس از کاربران استفاده میشوند.
مثال:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return f"Hello, my name is {self.name}"
person1 = Person("John Doe", ۳۰)
print(person1)
در این مثال، متد __str__
یک متد مخفی است که برای تبدیل شیء به رشته استفاده میشود.
نکات:
- از متدهای مخفی برای جلوگیری از تغییر در حالت داخلی شیء توسط کاربران استفاده میشود.
- از متدهای مخفی برای پیادهسازی توابع داخلی کلاس استفاده میشود.
- نام متدهای مخفی با توافق بین برنامهنویسان انتخاب میشود.
مثال کاربردی:
فرض کنید میخواهیم برنامهای بنویسیم که اطلاعات مربوط به دانشآموزان را ذخیره و مدیریت کند. برای این کار، میتوانیم از متدهای مخفی برای ذخیره اطلاعات محرمانه دانشآموزان استفاده کنیم.
class Student:
def __init__(self, name, grade):
self.name = name
self._grade = grade
def get_grade(self):
return self._grade
def set_grade(self, new_grade):
if new_grade >= ۰ and new_grade <= ۱۰۰:
self._grade = new_grade
student1 = Student("John Doe", ۱۰)
print(student1.get_grade())
student1.set_grade(۱۱)
print(student1.get_grade())
در این مثال، متد _grade
یک متد مخفی است که برای ذخیره نمره دانشآموز استفاده میشود. متدهای get_grade
و set_grade
برای دسترسی به نمره دانشآموز از طریق رابط عمومی کلاس استفاده میشوند.
لیست برخی از متدهای مخفی رایج در پایتون:
__init__
: متد سازنده که برای ایجاد و پیکربندی شیء جدید استفاده میشود.__new__
: متد کلاس که برای ایجاد و برگرداندن شیء جدید استفاده میشود.__del__
: متد مخرب که برای حذف شیء استفاده میشود.__str__
: متد که برای تبدیل شیء به رشته استفاده میشود.__repr__
: متد که برای تبدیل شیء به نمایش قابل ارزیابی استفاده میشود.__len__
: متد که برای محاسبه طول شیء استفاده میشود.__getitem__
: متد که برای دریافت عنصری از شیء با استفاده از شاخص استفاده میشود.__setitem__
: متد که برای تنظیم عنصری از شیء با استفاده از شاخص استفاده میشود.__iter__
: متد که برای ایجاد یک ایتراتور برای شیء استفاده میشود.__next__
: متد که برای دریافت عنصر بعدی از ایتراتور استفاده میشود.__add__
: متد که برای جمع دو شیء استفاده میشود.__sub__
: متد که برای تفریق دو شیء استفاده میشود.__mul__
: متد که برای ضرب دو شیء استفاده میشود.__div__
: متد که برای تقسیم دو شیء استفاده میشود.__eq__
: متد که برای مقایسه دو شیء برای برابر بودن استفاده میشود.__ne__
: متد که برای مقایسه دو شیء برای غیر برابر بودن استفاده میشود.__lt__
: متد که برای مقایسه دو شیء برای کوچکتر بودن استفاده میشود.__le__
: متد که برای مقایسه دو شیء برای کوچکتر یا مساوی بودن استفاده میشود.__gt__
: متد که برای مقایسه دو شیء برای بزرگتر بودن استفاده میشود.__ge__
: متد که برای مقایسه دو شیء برای بزرگتر یا مساوی بودن استفاده میشود.
۱. متد __init__
:
این متد برای ایجاد و پیکربندی اشیاء جدید کلاس استفاده میشود. به عنوان مثال:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
person1 = Person("John Doe", ۳۰)
print(person1.name)
# John Doe
print(person1.age)
# ۳۰
در کد فوق، متد __init__
برای ایجاد شیء جدید person1
با نام “John Doe” و سن 30 استفاده میشود.
۲. متد __new__
:
این متد قبل از __init__
اجرا میشود و برای کنترل پارامترهای ورودی و ایجاد شیء جدید استفاده میشود. به عنوان مثال:
class Person:
def __new__(cls, name, age):
if age < ۱۸:
raise ValueError("Age must be greater than or equal to 18")
return super().__new__(cls, name, age)
person1 = Person("John Doe", ۳۰)
person2 = Person("Jane Doe", ۱۷)
print(person1.age)
# ۳۰
try:
person2 = Person("Jane Doe", ۱۷)
except ValueError as e:
print(e)
# Age must be greater than or equal to 18
در کد فوق، متد __new__
برای بررسی سن قبل از ایجاد شیء جدید استفاده میشود. اگر سن کمتر از ۱۸ باشد، خطای ValueError صادر میشود.
۳. متد __del__
:
این متد قبل از حذف شیء اجرا میشود و برای انجام عملیات پاکسازی مانند بستن فایلها یا آزاد سازی حافظه استفاده میشود. به عنوان مثال:
class Person:
def __init__(self, name):
self.name = name
def __del__(self):
print(f"Goodbye, {self.name}")
person1 = Person("John Doe")
del person1
# Goodbye, John Doe
در کد فوق، متد __del__
برای چاپ پیام “Goodbye, {self.name}” هنگام حذف شیء person1
استفاده میشود.
۴. متد __str__
:
این متد برای تبدیل شیء به رشته قابل خواندن توسط انسان استفاده میشود. به عنوان مثال:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return f"Hello, my name is {self.name} and I am {self.age} years old"
person1 = Person("John Doe", ۳۰)
print(person1)
# Hello, my name is John Doe and I am 30 years old
در کد فوق، متد __str__
برای تبدیل شیء person1
به رشته “Hello, my name is John Doe and I am 30 years old” استفاده میشود.
۵. متد __repr__
:
این متد برای تبدیل شیء به رشته قابل ارزیابی توسط پایتون استفاده میشود. به عنوان مثال:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __repr__(self):
return f"Person(name='{self.name}', age={self.age})"
person1 = Person("John Doe", ۳۰)
print(repr(person1
نکات:
- از متدهای مخفی برای جلوگیری از تغییر در حالت داخلی شیء توسط کاربران استفاده میشود.
- از متدهای مخفی برای پیادهسازی توابع داخلی کلاس استفاده میشود.
- نام متدهای مخفی با توافق بین برنامهنویسان انتخاب میشود.