متدهای کلاس (Class Methods)
متد کلاس (Class Method) یعنی «تابع (Function) داخل کلاس». این تابع رفتار شیء را تعیین می کند. مثل دکمه های موبایل که کار مشخصی می کنند. با پارامتر self به داده های شیء می رسیم.
ساخت یک متد ساده
در کلاس یک متد می سازیم و با self از نام استفاده می کنیم.
class Person:
def __init__(self, name):
self.name = name
def greet(self):
print("Hello, my name is " + self.name)
p1 = Person("Emil")
p1.greet()
نکته: همیشه پارامتر اول متدها self است. یعنی «همین شیء».
متد با پارامتر
متد مانند تابع معمولی پارامتر می گیرد و مقدار برمی گرداند.
class Calculator:
def add(self, a, b):
return a + b
def multiply(self, a, b):
return a * b
calc = Calculator()
print(calc.add(5, 3))
print(calc.multiply(4, 7))
دسترسی و تغییر خصوصیت ها
با self می توانیم خصوصیت ها را بخوانیم یا تغییر دهیم.
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def get_info(self):
return f"{self.name} is {self.age} years old"
p1 = Person("Tobias", 28)
print(p1.get_info())
افزایش سن با متد
متد می تواند مقدار خصوصیت را تغییر دهد و پیام چاپ کند.
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def celebrate_birthday(self):
self.age += 1
print(f"Happy birthday! You are now {self.age}")
p1 = Person("Linus", 25)
p1.celebrate_birthday()
p1.celebrate_birthday()
نمایش شیء با __str__()
__str__ توضیح چاپ شیء را تعیین می کند. بدون آن متن پیش فرض می آید.
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
p1 = Person("Emil", 36)
print(p1)
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return f"{self.name} ({self.age})"
p1 = Person("Tobias", 36)
print(p1)
چند متد هماهنگ
کلاس می تواند چند متد مرتبط داشته باشد و باهم کار کنند.
class Playlist:
def __init__(self, name):
self.name = name
self.songs = []
def add_song(self, song):
self.songs.append(song)
print(f"Added: {song}")
def remove_song(self, song):
if song in self.songs:
self.songs.remove(song)
print(f"Removed: {song}")
def show_songs(self):
print(f"Playlist '{self.name}':")
for song in self.songs:
print(f"- {song}")
my_playlist = Playlist("Favorites")
my_playlist.add_song("Bohemian Rhapsody")
my_playlist.add_song("Stairway to Heaven")
my_playlist.show_songs()
حذف متد
می توان متد را از کلاس حذف کرد. سپس فراخوانی آن خطا می دهد.
class Person:
def __init__(self, name):
self.name = name
def greet(self):
print("Hello!")
p1 = Person("Emil")
del Person.greet
p1.greet()
گام های عملی
- کلاس بساز و متد greet اضافه کن.
- یک شیء بساز و متد را اجرا کن.
- یک متد با پارامتر بنویس و خروجی بگیر.
- __str__ را پیاده سازی کن و تفاوت را ببین.
مطالعه بعدی
برای ادامه شیءگرایی، وراثت را ببین. همچنین به خصوصیات کلاس و پارامتر self رجوع کن. عبارت متدهای کلاس در لینک ها آمده است.
جمع بندی سریع
- متد یعنی رفتار شیء.
- self یعنی همین شیء.
- متد می تواند داده را تغییر دهد.
- __str__ چاپ شیء را زیبا می کند.