در درسهای قبلی با 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")
بنابراین میتوان گفت:
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ها تعریف کنیم.
در این درس یاد گرفتیم که:
- Method در واقع تابعی است که داخل کلاس تعریف میشود.
selfبه Object فعلی اشاره میکند.- متدها میتوانند به ویژگیهای Object دسترسی داشته باشند.
- متدها میتوانند مقدار دریافت کنند.
- متدها میتوانند مقدار برگردانند.
- متدها میتوانند ویژگیهای Object را تغییر دهند.
- یک کلاس میتواند چندین متد داشته باشد.