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

آموزش Method و نحوه ساخت و استفاده از متدها در کلاس

در درس‌های قبلی با Class، Object و __init__ آشنا شدیم. حالا می‌خواهیم یاد بگیریم چگونه برای Objectهای خودمان رفتار و قابلیت تعریف کنیم.

در برنامه‌نویسی شی‌ءگرا، برای تعریف رفتار یک Object معمولاً از Method یا متد استفاده می‌کنیم.

متد چیست؟

متد در واقع یک تابع (Function) است که داخل یک کلاس تعریف می‌شود.

تفاوت اصلی این است که متد به یک کلاس یا Object مربوط است و می‌تواند به ویژگی‌های همان Object دسترسی داشته باشد.

به زبان ساده:

اگر ویژگی‌های Object مشخص کنند Object چه اطلاعاتی دارد، متدها مشخص می‌کنند Object چه کاری می‌تواند انجام دهد.

یک متد ساده

ابتدا یک کلاس ساده ایجاد می‌کنیم:

class Student:

    def say_hello(self):
        print("Hello!")

در این مثال say_hello() یک متد است.

برای استفاده از آن باید ابتدا یک Object ایجاد کنیم:

student1 = Student()

student1.say_hello()

خروجی:

Hello!

چرا self در متدها وجود دارد؟

همان‌طور که در درس قبل گفتیم، self به Object فعلی اشاره می‌کند.

بنابراین وقتی می‌نویسیم:

def say_hello(self):

متد می‌تواند به ویژگی‌ها و سایر متدهای همان Object دسترسی داشته باشد.

استفاده از ویژگی‌های Object داخل متد

حالا یک کلاس دانش‌آموز می‌سازیم که نام دانش‌آموز را ذخیره می‌کند.

class Student:

    def __init__(self, name):
        self.name = name

    def introduce(self):
        print("My name is", self.name)


student1 = Student("Ali")

student1.introduce()

خروجی:

My name is Ali

در اینجا متد introduce() از self.name استفاده می‌کند تا نام Object فعلی را نمایش دهد.

هر Object می‌تواند رفتار متفاوتی داشته باشد

اگر چند Object از یک کلاس ایجاد کنیم، هر Object اطلاعات خودش را دارد و همان متد می‌تواند نتیجه متفاوتی ایجاد کند.

class Student:

    def __init__(self, name):
        self.name = name

    def introduce(self):
        print("My name is", self.name)


student1 = Student("Ali")
student2 = Student("Sara")

student1.introduce()
student2.introduce()

خروجی:

My name is Ali
My name is Sara

متدی که مقدار برمی‌گرداند

متدها فقط برای چاپ اطلاعات نیستند. می‌توانند یک مقدار را نیز با استفاده از return برگردانند.

class Calculator:

    def add(self, a, b):
        return a + b


calculator = Calculator()

result = calculator.add(10, 20)

print(result)

خروجی:

30

در این مثال متد add() دو عدد دریافت می‌کند و نتیجه جمع را برمی‌گرداند.

متد با چند پارامتر

یک متد می‌تواند علاوه بر self پارامترهای دیگری نیز داشته باشد.

class Person:

    def __init__(self, name):
        self.name = name

    def say_message(self, message):
        print(self.name, "says:", message)


person1 = Person("Ali")

person1.say_message("Hello Python!")

خروجی:

Ali says: Hello Python!

متد برای تغییر ویژگی Object

یک متد می‌تواند ویژگی‌های Object را نیز تغییر دهد.

class Person:

    def __init__(self, name):
        self.name = name

    def change_name(self, new_name):
        self.name = new_name


person1 = Person("Ali")

print(person1.name)

person1.change_name("Reza")

print(person1.name)

خروجی:

Ali
Reza

همان‌طور که می‌بینید، متد change_name() مقدار ویژگی name را تغییر داد.

یک مثال کاربردی با حساب بانکی

حالا یک مثال واقعی‌تر می‌بینیم. فرض کنید یک حساب بانکی داریم که موجودی دارد.

class BankAccount:

    def __init__(self, owner, balance):
        self.owner = owner
        self.balance = balance

    def deposit(self, amount):
        self.balance += amount

    def show_balance(self):
        print("Balance:", self.balance)


account1 = BankAccount("Ali", 1000000)

account1.show_balance()

account1.deposit(500000)

account1.show_balance()

خروجی:

Balance: 1000000
Balance: 1500000
چه اتفاقی افتاد؟
  • owner نام صاحب حساب است.
  • balance موجودی حساب است.
  • deposit() برای افزایش موجودی استفاده می‌شود.
  • show_balance() موجودی فعلی را نمایش می‌دهد.

تفاوت Function و Method

یک Function معمولاً خارج از کلاس تعریف می‌شود.

def hello():
    print("Hello")

اما یک Method داخل کلاس تعریف می‌شود.

class Student:

    def hello(self):
        print("Hello")

بنابراین می‌توان گفت:

Function: تابع مستقل

Method: تابعی که داخل کلاس تعریف شده و معمولاً برای کار با Object استفاده می‌شود.

چند متد در یک کلاس

یک کلاس می‌تواند چندین متد داشته باشد.

class Student:

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

    def introduce(self):
        print("Name:", self.name)

    def show_age(self):
        print("Age:", self.age)


student1 = Student("Ali", 20)

student1.introduce()
student1.show_age()

خروجی:

Name: Ali
Age: 20

نکته مهم درباره self

هنگام فراخوانی متد، معمولاً نیازی نیست self را خودمان ارسال کنیم.

student1.introduce()

پایتون به صورت خودکار Object مربوط به متد را در اختیار self قرار می‌دهد.

تمرین

یک کلاس به نام Car ایجاد کنید که دارای ویژگی‌های زیر باشد:

  • brand برای برند خودرو
  • color برای رنگ خودرو

سپس دو متد ایجاد کنید:

  • show_info() برای نمایش اطلاعات خودرو
  • change_color() برای تغییر رنگ خودرو

در پایان یک Object ایجاد کنید، اطلاعات آن را نمایش دهید، رنگ آن را تغییر دهید و دوباره اطلاعات را چاپ کنید.

جمع‌بندی

متدها یکی از بخش‌های مهم برنامه‌نویسی شی‌ءگرا هستند. با استفاده از متدها می‌توانیم رفتارهای مختلفی برای Objectها تعریف کنیم.

در این درس یاد گرفتیم که:

درس بعدی: در درس بعدی وارد یکی از مهم‌ترین مفاهیم OOP یعنی وراثت (Inheritance) می‌شویم و یاد می‌گیریم چگونه یک کلاس می‌تواند ویژگی‌ها و رفتارهای کلاس دیگری را به ارث ببرد.