پارامتر self در کلاس پایتون — به زبان ساده

عکس شاخص پارامتر self در کلاس پایتون

پارامتر self در کلاس پایتون نمایانگر نمونه‌ای از یک کلاس است که به ما اجازه می‌دهد به ویژگی‌ها و متدهای خاص همان نمونه دسترسی داشته باشیم. در واقع، self به عنوان یک ارجاع به شی جاری عمل می‌کند و زمانی که متدهای یک کلاس فراخوانی می‌شوند، به طور خودکار به عنوان اولین پارامتر به آن‌ها ارسال می‌شود. این پارامتر به ما این امکان را می‌دهد که ویژگی‌ها و متغیرهای نمونه را درون متدهای کلاس دسترسی و تغییر دهیم. در این مقاله از مجموعه مقاله‌های مجله پی استور، به بررسی دقیق پارامتر self در کلاس‌های پایتون خواهیم پرداخت و چگونگی استفاده صحیح از آن را در کدنویسی شی‌گرا آموزش خواهیم داد.

مقدمه

با استفاده از پارامتر self می‌توان به ویژگی‌ها «Attributes» و متدهای «Methods» کلاس در زبان پایتون دسترسی پیدا کرد. این کلمه ویژگی‌ها را با آرگومان‌های داده شده مرتبط می‌کند. دلیل نیاز به استفاده از پارامتر self در پایتون این است که پایتون از نحو «syntax» @ برای ارجاع به ویژگی‌های نمونه استفاده نمی‌کند. پایتون روش استفاده از متدها را به گونه‌ای طراحی کرده که نمونه‌ای که متد روی آن فراخوانی می‌شود، به صورت خودکار ارسال شود اما به صورت خودکار دریافت نشود؛ بنابراین اولین پارامتر متدها همان نمونه‌ای است که متد روی آن فراخوانی شده است.

استفاده ازپارامتر self در کلاس پایتون

پارامتر self در کلاس پایتون برای اشاره به نمونه (شی) فعلی کلاس استفاده می‌شود. پارامتر self در کلاس پایتون به شما اجازه می‌دهد به ویژگی‌ها و متدهای خاص همان نمونه دسترسی داشته باشید. پارامتر self به طور پیش‌فرض به عنوان اولین پارامتر در متدهای نمونه یک کلاس تعریف می‌شود و زمانی که یک متد روی یک شی فراخوانی می‌شود، خود شی به صورت خودکار به عنوان مقدار self به متد ارسال می‌گردد. با استفاده از self می‌توانید ویژگی‌ها را تغییر دهید یا به رفتارهای منحصربه‌فرد هر نمونه دسترسی داشته باشید. به عنوان مثال می‌توانیم تکه کد زیر را در نظر بگیریم:

class Mynumber:
    def __init__(self, value):
        self.value = value
    
    def print_value(self):
        print(self.value)

obj1 = Mynumber(17)
obj1.print_value()

خروجی:

۱۷

متد __init__ در کلاس پایتون

هنگام کار با پارامتر self در کلاس پایتون ، باید بدانید که در پایتون سازنده‌ی کلاس یک متد خاص به نام __init__ است که هنگام ایجاد یک نمونه (شی) از کلاس فراخوانی می‌شود. این متد برای مقداردهی اولیه به ویژگی‌های شی استفاده می‌شود. توجه داشته باشید که پارامتر self در سازنده «Constructor» به نمونه‌ای «Instance» که در حال ایجاد است اشاره دارد و به شما اجازه می‌دهد به ویژگی‌های آن دسترسی داشته و آن‌ها را تنظیم کنید.

class Subject:

    def __init__(self, attr1, attr2):
        self.attr1 = attr1
        self.attr2 = attr2


obj = Subject('Maths', 'Science')
print(obj.attr1)  
print(obj.attr2)

خروجی:

Maths
Science

self در پایتون کلمه کلیدی است؟

پارامتر self در پایتون، یک کلمه کلیدی «Keyword» نیست، بلکه فقط یک نام متداول برای پارامتر است که در متدهای نمونه برای اشاره به شی یا نمونه‌ی کلاس استفاده می‌شود. در واقع، self به عنوان یک ارجاع به شی جاری در داخل متدهای کلاس عمل می‌کند. شما می‌توانید از هر نام دیگری به جای self استفاده کنید، اما استفاده از self به عنوان نام پارامتر یک قرارداد شناخته شده در پایتون است که باعث می‌شود کد قابل فهم‌تر و استانداردتر باشد. به این ترتیب، حتی اگر از نام دیگری به جای `self` استفاده کنید، توصیه می‌شود که از آن در صورتی که کدتان برای دیگران خوانده می‌شود، استفاده کنید تا کد شما با دیگر کدها و منابع پایتون هماهنگ باشد.

پارامتر self در کلاس پایتون همیشه به شی فعلی اشاره دارد. زمانی که یک نمونه از یک کلاس ایجاد می‌کنید، در واقع یک شی با مجموعه‌ای از ویژگی‌ها و متدهای خاص خود می‌سازید. این پارامتر به متدهای داخل کلاس اجازه می‌دهد که به ویژگی‌ها و متغیرهای نمونه دسترسی داشته باشند و آن‌ها را تغییر دهند. به عبارت دیگر، هر بار که یک شی جدید از کلاس ایجاد می‌شود، self به آن شی جدید اشاره می‌کند و این امکان را فراهم می‌آورد که هر نمونه از کلاس ویژگی‌های و رفتارهای خاص خود را داشته باشد. در نتیجه، پارامتر self نقش اساسی در کار با نمونه‌های مختلف یک کلاس و مدیریت ویژگی‌های آن‌ها دارد.

class Check:
    def __init__(self):
        print("Address of self = ",id(self))

obj = Check()
print("Address of class object = ",id(obj))

خروجی:

Address of self =  140273244381008
Address of class object =  140273244381008

مثالی برای کلاس در پایتون با ویژگی‌ ها و متدها

در تکه کد زیر یک کلاس به نام Car تعریف می‌شود که نمایانگر خودروها با ویژگی‌های model و color است. سازنده __init__ این ویژگی‌ها را برای هر نمونه مقداردهی می‌کند. متد show مدل و رنگ خودرو را نمایش می‌دهد، در حالی که دسترسی مستقیم به ویژگی‌ها و فراخوانی متدها، بازیابی داده‌های مخصوص هر نمونه را نشان می‌دهد.

class Car():
    
    # init method or constructor
    def __init__(self, model, color):
        self.model = model
        self.color = color
        
    def show(self):
        print("Model is", self.model )
        print("color is", self.color )
        
# both objects have different self which contain their attributes
audi = Car("audi a4", "blue")
ferrari = Car("ferrari 488", "green")

audi.show()     # same output as car.show(audi)
ferrari.show()  # same output as car.show(ferrari)

print("Model for audi is ",audi.model)
print("Colour for ferrari is ",ferrari.color)

خروجی:

Model is audi a4
color is blue
Model is ferrari 488
color is green
Model for audi is  audi a4
Colour for ferrari is  green

پارامتر self در سازنده‌ ها و متدها

پارامتر self در کلاس پایتون اولین آرگومانی است که باید به سازنده و متد نمونه ارسال شود. به عبارت دیگر، وقتی متد یا سازنده‌ای را در یک کلاس تعریف می‌کنید، باید self را به عنوان اولین پارامتر وارد کنید تا به شی جاری کلاس اشاره کند. این پارامتر به صورت خودکار هنگام فراخوانی متد یا سازنده به تابع ارسال می‌شود و نیازی به ارسال آن در هنگام فراخوانی متد نیست. اگر self را به عنوان اولین پارامتر ارسال نکنید، پایتون خطا می‌دهد چون این پارامتر به طور ضروری برای دسترسی به ویژگی‌ها و متدهای نمونه نیاز است. به این ترتیب، استفاده از self یک الزام در طراحی متدهای کلاس در پایتون است.

# Self is always required as the first argument
class Check:
    def __init__():
        print("This is Constructor")

object = Check()
print("Worked fine")

# Following Error is produced if Self is not passed as an argument
Traceback (most recent call last):
  File "/home/c736b5fad311dd1eb3cd2e280260e7dd.py", line 6, in <module>
    object = Check()
TypeError: __init__() takes 0 positional arguments but 1 was given

پارامتر self جزو کلمات کلیدی پایتون نیست بلکه در واقع یک قرارداد است. self یک پارامتر در متدهای پایتون است و کاربر می‌تواند از نام پارامتر دیگری به جای آن استفاده کند. استفاده از self در برنامه نویسی پایتون  یک روش و رویه خوب به حساب می‌آید چون باعث خواناتر شدن کد می‌شود و توصیه ما استفاده از آن است.

class This_is_class: 
    def __init__(in_place_of_self): 
        print("we have used another "
        "parameter name in place of self") 
        
object = This_is_class()

خروجی:

we have used another parameter name in place of self

نتیجه گیری

پارامتر self در کلاس پایتون به‌عنوان یک مرجع به شیء فعلی کلاس استفاده می‌شود. این پارامتر در تمامی متدهای کلاس به‌عنوان اولین پارامتر باید حضور داشته باشد و به‌طور خودکار توسط پایتون به متدها منتقل می‌شود. با استفاده از پارامتر self، می‌توان به ویژگی‌ها و متدهای شی درون کلاس دسترسی پیدا کرد و آن‌ها را تغییر داد. این پارامتر باعث می‌شود که هر شیء از کلاس ویژگی‌ها و رفتارهای خاص خود را داشته باشد. به طور خلاصه، پارامتر self در کلاس پایتون یک ابزار ضروری برای تعامل با داده‌های داخلی کلاس و مدیریت وضعیت اشیاء است.


سوالات متداول


کلمه کلیدی self در کلاس‌های پایتون چیست؟

کلمه کلیدی self در پایتون برای نمایش یک نمونه (شیء) از کلاس استفاده می‌شود. این کلمه امکان دسترسی به ویژگی‌ها و متدهای کلاس را فراهم می‌کند. این باید اولین پارامتر هر متد در کلاس باشد، از جمله متد __init__ که به‌عنوان سازنده عمل می‌کند.

چگونه از self برای دسترسی به ویژگی‌های نمونه در کلاس‌های پایتون استفاده کنیم؟

برای دسترسی به ویژگی‌ها و متدهای نمونه در یک کلاس، از self استفاده می‌کنید. هنگام تعریف ویژگی‌های نمونه در متد init یا هر متد دیگر، از self.attribute_name برای اشاره به آن‌ها استفاده می‌شود.

نقش self در متدهای پایتون چیست؟

نقش self در متدهای پایتون این است که به نمونه‌ای که متد را فراخوانی کرده اشاره کند. این روش دسترسی به ویژگی‌ها و متدهای دیگر نمونه را ممکن می‌سازد. بدون self، متد نمی‌داند که از ویژگی‌های کدام نمونه استفاده کند.

آیا نوشتن self در پایتون ضروری است؟

بله، نوشتن self به‌عنوان پارامتر اول در متدهای نمونه یک کلاس در پایتون ضروری است. اگرچه نام self یک قرارداد است و کلمه کلیدی نیست، می‌توانید از هر نامی استفاده کنید، اما باید پارامتر اول متد باشد. استفاده از self یک قرارداد پذیرفته‌شده است و خوانایی کد را بهبود می‌بخشد.

میزان رضایتمندی
لطفاً میزان رضایت خودتان را از این مطلب با دادن امتیاز اعلام کنید.
[ امتیاز میانگین 0 از 0 نفر ]
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.
منابع و مراجع:
geeksforgeeks مجله پی استور w3schools programiz

دیدگاه‌ خود را بنویسید

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



برچسب‌ها:
پایتون


پیمایش به بالا