پارامتر 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 در کلاس پایتون یک ابزار ضروری برای تعامل با دادههای داخلی کلاس و مدیریت وضعیت اشیاء است.