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

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

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

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

آموزش مقدماتی پایتون

بیایید یک مثال ساده را برای درک بهتر کانستراکتورها در پایتون مشاهده کنیم:

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

# ایجاد یک شیء از کلاس Person با استفاده از کانستراکتور
person = Person("آرمان", 30)

# دسترسی به ویژگی‌های شیء
print(person.name)  # خروجی: "آرمان"
print(person.age)   # خروجی: 30

در این مثال، ما یک کلاس به نام Person داریم که دو ویژگی به نام‌های name و age دارد. کانستراکتور این کلاس با متد __init__ تعریف شده است و دو پارامتر به نام‌های name و age را به عنوان ورودی می‌پذیرد. هنگام ایجاد یک شیء از کلاس Person، می‌توانیم مقادیر مورد نظر را به عنوان ورودی به کانستراکتور منتقل کنیم تا ویژگی‌های شیء مقداردهی شوند.

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

کانستراکتورها در برنامه‌نویسی شیءگرا دارای کاربردهای متنوعی هستند. در زیر به برخی از کاربردهای مهم آنها در پایتون اشاره می‌کنیم:

  1. مقداردهی اولیه به ویژگی‌ها: یکی از کاربردهای اصلی کانستراکتورها، مقداردهی اولیه به ویژگی‌های یک شیء است. این ویژگی‌ها معمولاً ویژگی‌هایی هستند که برای کل شیء معنادار هستند و مقدار اولیه آنها در زمان ایجاد شیء تعیین می‌شود.
  2. اعتبارسنجی داده‌ها: با استفاده از کانستراکتورها می‌توانید داده‌های ورودی را اعتبارسنجی کنید و مطمئن شوید که شیء‌هایی که ایجاد می‌شوند دارای داده‌های معتبر هستند. این کار می‌تواند به جلوگیری از ورود داده‌های نامعتبر و خطاهای مرتبط با آنها کمک کند.
  3. مدیریت منابع: در برخی موارد، ممکن است نیاز باشد منابع خارجی مانند اتصالات دیتابیس یا فایل‌ها را مدیریت کنید. کانستراکتورها مکان مناسبی برای ایجاد و مدیریت این منابع فراهم می‌کنند. به عنوان مثال، شما می‌توانید یک کانستراکتور برای باز کردن یک فایل تعریف کنید و destructor را برای بستن فایل به صورت خودکار در زمان حذف شیء استفاده کنید.
  4. اجتناب از تکرار کد: اگر کدهای تکراری برای مقداردهی اولیه ویژگی‌ها در برنامه‌ی شما وجود داشته باشد، می‌توانید از کانستراکتورها استفاده کنید تا این کدها را تا حد ممکن از بین ببرید و کد خود را ساده‌تر و مدیریت‌پذیرتر کنید.

نکات مهم در استفاده از کانستراکتورها

در هنگام استفاده از constructor در پایتون، باید توجه به نکات مهمی داشته باشید:

  1. اولویت اول self: همواره اولین پارامتر کانستراکتور self است که به شیء در حال ایجاد اشاره می‌کند. شما باید از self برای دسترسی به ویژگی‌ها و متدهای شیء استفاده کنید.
  2. مقادیر پیش‌فرض: می‌توانید مقادیر پیش‌فرض برای پارامترهای کانستراکتور تعریف کنید. این مقادیر در صورتی که مقداری به عنوان ورودی به کانستراکتور داده نشود، به کار می‌روند. این امکان به شما اجازه می‌دهد تا شیء‌ها را با مقادیر پیش‌فرض ایجاد کنید و از ایجاد مکرر کانستراکتورها جلوگیری کنید.
  3. مقداردهی اولیه ویژگی‌ها: کانستراکتورها معمولاً برای مقداردهی اولیه به ویژگی‌های شیء استفاده می‌شوند. در کانستراکتور، مقادیر به ویژگی‌ها اختصاص داده می‌شوند تا شیء با ویژگی‌هایی با مقادیر اولیه مناسب ایجاد شود.
  4. نام‌گذاری کانستراکتور: در پایتون، نام کانستراکتور همواره __init__ است و از این قاعده بهتر است پیروی کنید. هر کلاس باید یک کانستراکتور با این نام داشته باشد.
  5. مقادیر مشخص گردیده در کانستراکتور: مقادیری که در کانستراکتور به ویژگی‌ها اختصاص داده می‌شود، به عنوان مقادیر اولیه شیء شما در نظر گرفته می‌شوند و می‌توانید بعداً این مقادیر را تغییر دهید.

مثال‌های constructor در پایتون

برای بهترین درک از کاربردهای و نحوه استفاده از کانستراکتورها، می‌توانید به مثال‌های دیگری نیز نگاه کنید:

مقداردهی اولیه به ویژگی‌ها

class Book:
    def __init__(self, title, author):
        self.title = title
        self.author = author

# ایجاد یک شیء از کلاس Book با استفاده از کانستراکتور
book = Book("عشق از نیم‌شب تا سحر", "فریدون مشیری")

# دسترسی به ویژگی‌های شیء
print(book.title)   # خروجی: "عشق از نیم‌شب تا سحر"
print(book.author)  # خروجی: "فریدون مشیری"

استفاده از مقادیر پیش‌فرض

class Rectangle:
    def __init__(self, width=1, height=1):
        self.width = width
        self.height = height

# ایجاد یک شیء از کلاس Rectangle با استفاده از مقدار پیش‌فرض
default_rectangle = Rectangle()

# ایجاد یک شیء از کلاس Rectangle با مقادیر مشخص
custom_rectangle = Rectangle(5, 10)

print(default_rectangle.width)   # خروجی: 1
print(default_rectangle.height)  # خروجی: 1

print(custom_rectangle.width)    # خروجی: 5
print(custom_rectangle.height)   # خروجی: 10

اعتبارسنجی داده‌ها

class Temperature:
    def __init__(self, celsius):
        if celsius < -273.15:
            raise ValueError("دما نمی‌تواند کمتر از -273.15 درجه سلسیوس باشد.")
        self.celsius = celsius

# ایجاد یک شیء از کلاس Temperature با دمای معتبر
valid_temperature = Temperature(25)

# تلاش برای ایجاد یک شیء با دمای نامعتبر
try:
    invalid_temperature = Temperature(-300)
except ValueError as e:
    print(e)  # خروجی: "دما نمی‌تواند کمتر از -273.15 درجه سلسیوس باشد."