آموزش متد init در پایتون
در اکثر زبانهای برنامه نویسی که از شی گرایی پشتیبانی میکنند، یک متد وجود دارد که به آن سازنده یا constructors میگویند. وظیفه این متد مقداردهی اولیه آبجکتها است. در پایتون متد __init__ اینکار را برای ما انجام میدهد. در این مقاله به طور کامل با متد __init__ آشنا شده و یاد میگیرید که چطور در حالتهای مختلف از آن استفاده کنید.
# متد __init__
متد __init__ یکی از پرکاربردترین متدهایی است که در زبان پایتون استفاده میشود. این متد جزو متدهای داخلی پایتون است و تقریبا هر زمان که بخواهید شی گرا کد بزنید، به این متد نیاز دارید. متد __init__ وظیفه مقداردهی اولیه آبجکتها را در پایتون دارد. اگر این متد در یک کلاس وجود داشته باشد، به محض ساخت یک آبجکت از آن کلاس، متد __init__ فعال خواهد شد. سینتکس کلی این متد به شکل زیر است:
def __init__(self, [arguments])
از کلمه کلیدی def برای ساخت این متد استفاده میشود. اولین آیتم که self است به خود آبجکت اشاره میکند. علاوه بر self میتوانید آرگومانهای دیگری نیز به متد __init__ ارسال کنید. این آرگومانها اختیاری هستند و به هر تعداد که بخواهید میتوانید از آن داشته باشید.
ویدیو پیشنهادی: ویدیو آموزش برنامهنویسی شی گرا(oop) در پایتون
# چند مثال از متد __init__
بیایید به چند نمونه از این متد سازنده در حالتهای مختلف نگاهی بیندازیم.
+ کلاس بدون متد سازنده
میتوانید یک کلاس بدون متد سازنده ایجاد کنید. داشتن متد سازنده کاملا اختیاری است. در این حالت نمیتوانید هیچ مقداری را به طور مستقیم به کلاس ارسال کنید:
class Person:
pass
a = Person()
print(type(a)) # <class '__main__.Person'>
در کد بالا یک آبجکت از کلاس Person ایجاد کردیم.
+ متد سازنده بدون آرگومان
ما میتوانیم متد سازندهای داشته باشیم که هیچ آرگومانی نمیگیرد. از این روش برای زمانی استفاده میشود که بخواهید اطلاعات به خصوصی را در زمان ساخت آبجکت ذخیره یا نشان دهید:
class Person:
count = 0
def __init__(self):
print('Person constructor')
Person.count += 1
a = Person()
b = Person()
print(Person.count)
# Person constructor
# Person constructor
# 2
در کد بالا، هر بار که یک آبجکت ایجاد میشود، جملهای را چاپ میکنیم. همچنین با استفاده از متغیر count تعداد آبجکتهای ساخته شده از کلاس Person را میشماریم.
+ متد سازنده با آرگومان
در اغلب اوقات متد سازنده با چند آرگومان همراه است. این آرگومانها برای ذخیره مقادیر اولیه در آبجکت استفاده میشود:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
a = Person('amir', 12)
در کد بالا، کلاس Person به طور مستقیم دو مقدار name و age را میگیرد. در زمان ساخت آبجکت از این کلاس حتما باید این دو مقدار را ارسال کنید اگر ارسال نکنید با TypeError مواجه خواهید شد.
+ متد سازنده در زمان ارثبری
اگر کلاستان از کلاس دیگری ارثبری میکند، میتوانید از متد __init__ کلاس والد استفاده کنید. اگر در کلاس فرزند متد __init__ وجود نداشته باشد، متدی که در کلاس والد هست فراخوانی میشود:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
class Male(Person):
pass
a = Male('amir', 12)
در کد بالا، کلاس Male از کلاس Person ارثبری میکند. آبجکت a را از کلاس Male ایجاد کردهایم اما از آنجایی که در کلاس Male متد __init__ وجود ندارد، متدی که در کلاس Person هست فراخوانی میشود.
مقاله پیشنهادی: 10 مزیت انکارناپذیر یادگیری پایتون
# پایتون از چند متد __init__ پشتیبانی نمیکند
برخلاف زبانهایی مانند جاوا یا کاتلین، پایتون از چند متد سازنده پشتیبانی نمیکند. نمیتوانید چند متد __init__ در یک کلاس پایتون استفاده کنید:
class Person:
def __init__(self):
print('first')
def __init__(self):
print('second')
a = Person()
# second
اگر از چند متد __init__ استفاده کنید، آخرین متد فعال خواهد شد.
# متد __init__ نمیتواند چیزی را return کند
در متد __init__ پایتون هیچ وقت نمیتوانید چیزی را return کنید. اگر چیزی را return کنید، ارور TypeError میگیرید:
class Person:
def __init__(self):
return 'first'
a = Person()
# TypeError: __init__() should return None, not 'str'
در متد سازنده پایتون فقط میتوانید None را return کنید.
# نتیجه گیری
وقتی یک کلاس جدید در پایتون می سازید، اولین متدی که به آن نیاز دارید، احتمالا متد __init__ است. متد __init__ به شما امکان می دهد مستقیما در کلاس آرگومان بپذیرید. مهمتر از آن، متد __init__ به شما امکان می دهد مقادیر اولیه را در آبجکت خود ذخیره کنید.