مقدمه

در درس قبل، با اصول اولیه تعریف یک کلاس و ساخت نمونه از آن آشنا شدیم. اکنون که می‌توانید یک کلاس بسازید و از آن نمونه‌برداری کنید، آماده‌اید تا با جزئیات بیشتری در مورد کار با اتریبیوت‌ها و متدها آشنا شوید. در این درس، ما کلاس Car را به عنوان مثال اصلی خود در نظر گرفته و قابلیت‌های مختلف آن را قدم به قدم تکمیل خواهیم کرد.

تنظیم یک مقدار پیش‌فرض برای یک اتریبیوت

هر اتریبیوت در یک کلاس نیاز به یک مقدار اولیه دارد. این مقدار می‌تواند از طریق یک پارامتر در متد __init__() تنظیم شود، یا می‌توان یک مقدار پیش‌فرض را مستقیماً در داخل سازنده برای آن تعریف کرد. این کار باعث می‌شود که دیگر نیازی به پاس دادن آن مقدار هنگام ساخت نمونه نباشد.

Copy Icon PYTHON
class Car:
    """A simple attempt to represent a car."""

    def __init__(self, make, model, year):
        """Initialize attributes to describe a car."""
        self.make = make
        self.model = model
        self.year = year
        self.odometer_reading = 0 # Default value

    def read_odometer(self):
        """Print a statement showing the car's mileage."""
        print(f"This car has {self.odometer_reading} miles on it.")

my_new_car = Car('audi', 'a4', 2024)
my_new_car.read_odometer()

در این مثال، ما یک اتریبیوت جدید به نام odometer_reading اضافه کرده‌ایم که مقدار اولیه آن همیشه 0 است.

این کار تضمین می‌کند که هر نمونه جدید از کلاس Car با یک کیلومترشمار صفر شروع به کار می‌کند و ما دیگر نیازی به پاس دادن این مقدار اولیه هنگام ساخت نمونه نداریم.

تغییر مقادیر اتریبیوت‌ها

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

۱. تغییر مقدار به صورت مستقیم

ساده‌ترین راه، دسترسی مستقیم به اتریبیوت از طریق نمونه و تخصیص یک مقدار جدید به آن است.

Copy Icon PYTHON
my_new_car = Car('audi', 'a4', 2024)
my_new_car.read_odometer()

# Modify an attribute's value directly
my_new_car.odometer_reading = 23
my_new_car.read_odometer()

در اینجا ما مستقیماً مقدار odometer_reading را به 23 تغییر داده‌ایم. این روش ساده است، اما همیشه بهترین گزینه نیست، زیرا به هر کدی اجازه می‌دهد تا مقدار اتریبیوت را بدون هیچ کنترلی تغییر دهد.

۲. تغییر مقدار از طریق یک متد

یک روش بهتر و کنترل‌شده‌تر، نوشتن یک متد اختصاصی برای به‌روزرسانی مقدار یک اتریبیوت است. این کار به شما اجازه می‌دهد تا منطق اعتبارسنجی را در داخل کلاس کپسوله‌سازی کنید.

Copy Icon PYTHON
# In the Car class
def update_odometer(self, mileage):
    """
    Set the odometer reading to the given value.
    Reject the change if it attempts to roll the odometer back.
    """
    if mileage >= self.odometer_reading:
        self.odometer_reading = mileage
    else:
        print("You can't roll back an odometer!")

my_new_car.update_odometer(23_500)
my_new_car.read_odometer()

my_new_car.update_odometer(23_000) # This will be rejected

اکنون، هر تلاشی برای کم کردن مقدار کیلومترشمار رد می‌شود و یک پیام خطا چاپ می‌شود. این روش کنترل بیشتری بر روی نحوه تغییر اتریبیوت‌های کلاس به ما می‌دهد.

۳. افزایش مقدار یک اتریبیوت از طریق یک متد

ما همچنین می‌توانیم متدهایی بنویسیم که به جای تنظیم یک مقدار جدید، مقدار فعلی یک اتریبیوت را افزایش دهند.

Copy Icon PYTHON
# In the Car class
def increment_odometer(self, miles):
    """Add the given amount to the odometer reading."""
    self.odometer_reading += miles

my_new_car.increment_odometer(100)
my_new_car.read_odometer()

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

در این درس، با روش‌های مختلف کار با اتریبیوت‌ها در کلاس‌ها و نمونه‌ها آشنا شدیم. دیدیم که چگونه می‌توان مقادیر پیش‌فرض تعریف کرد و چگونه با استفاده از متدهای سفارشی، تغییر مقادیر را به صورت کنترل‌شده مدیریت کرد. در درس بعدی، به سراغ یکی از قدرتمندترین مفاهیم شیءگرایی، یعنی «درک مفهوم وراثت» خواهیم رفت.