آموزش

متدهای مخفی در پایتون 

متد مخفی در پایتون متدی است که با دو خط زیر (_) شروع می‌شود. متدهای مخفی برای مخفی کردن جزئیات پیاده‌سازی کلاس از کاربران استفاده می‌شوند.

مثال:

Python
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", 30)

print(person1)

در این مثال، متد __str__ یک متد مخفی است که برای تبدیل شیء به رشته استفاده می‌شود.

نکات:

  • از متدهای مخفی برای جلوگیری از تغییر در حالت داخلی شیء توسط کاربران استفاده می‌شود.
  • از متدهای مخفی برای پیاده‌سازی توابع داخلی کلاس استفاده می‌شود.
  • نام متدهای مخفی با توافق بین برنامه‌نویسان انتخاب می‌شود.

مثال کاربردی:

فرض کنید می‌خواهیم برنامه‌ای بنویسیم که اطلاعات مربوط به دانش‌آموزان را ذخیره و مدیریت کند. برای این کار، می‌توانیم از متدهای مخفی برای ذخیره اطلاعات محرمانه دانش‌آموزان استفاده کنیم.

Python
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 >= 0 and new_grade <= 100:
      self._grade = new_grade

student1 = Student("John Doe", 10)

print(student1.get_grade())

student1.set_grade(11)

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__: متد که برای مقایسه دو شیء برای بزرگتر یا مساوی بودن استفاده می‌شود.

1. متد __init__:

این متد برای ایجاد و پیکربندی اشیاء جدید کلاس استفاده می‌شود. به عنوان مثال:

Python
class Person:
  def __init__(self, name, age):
    self.name = name
    self.age = age

person1 = Person("John Doe", 30)

print(person1.name)
# John Doe
print(person1.age)
# 30

در کد فوق، متد __init__ برای ایجاد شیء جدید person1 با نام “John Doe” و سن 30 استفاده می‌شود.

2. متد __new__:

این متد قبل از __init__ اجرا می‌شود و برای کنترل پارامترهای ورودی و ایجاد شیء جدید استفاده می‌شود. به عنوان مثال:

Python
class Person:
  def __new__(cls, name, age):
    if age < 18:
      raise ValueError("Age must be greater than or equal to 18")
    return super().__new__(cls, name, age)

person1 = Person("John Doe", 30)
person2 = Person("Jane Doe", 17)

print(person1.age)
# 30

try:
  person2 = Person("Jane Doe", 17)
except ValueError as e:
  print(e)
# Age must be greater than or equal to 18

در کد فوق، متد __new__ برای بررسی سن قبل از ایجاد شیء جدید استفاده می‌شود. اگر سن کمتر از 18 باشد، خطای ValueError صادر می‌شود.

3. متد __del__:

این متد قبل از حذف شیء اجرا می‌شود و برای انجام عملیات پاک‌سازی مانند بستن فایل‌ها یا آزاد سازی حافظه استفاده می‌شود. به عنوان مثال:

Python
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 استفاده می‌شود.

4. متد __str__:

این متد برای تبدیل شیء به رشته قابل خواندن توسط انسان استفاده می‌شود. به عنوان مثال:

Python
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", 30)

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” استفاده می‌شود.

5. متد __repr__:

این متد برای تبدیل شیء به رشته قابل ارزیابی توسط پایتون استفاده می‌شود. به عنوان مثال:

Python
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", 30)

print(repr(person1

نکات:

  • از متدهای مخفی برای جلوگیری از تغییر در حالت داخلی شیء توسط کاربران استفاده می‌شود.
  • از متدهای مخفی برای پیاده‌سازی توابع داخلی کلاس استفاده می‌شود.
  • نام متدهای مخفی با توافق بین برنامه‌نویسان انتخاب می‌شود.
نمایش بیشتر

نوشته‌های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

همچنین ببینید
بستن
دکمه بازگشت به بالا