پایتون

جلسه ۳۹: متدهای کلاسی و استاتیک در پایتون

در این درس متدهای کلاسی و استاتیک را بررسی خواهیم کرد.

متدها در کلاس پایتون

در کلاس‌های پایتون ما سه نوع متد داریم: متدهای instance، استاتیک و کلاسی. در درس قبلی متدهای instance را بررسی کردیم. در این درس ما روی متدهای کلاسی و استاتیک توجه میکنیم.

متدهای کلاسی

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

(متدهای کلاسی با استفاده از نام خود کلاس قابل دسترسی هستند و حتی بدون ساخت یک شی از کلاس هم میتوانند فراخوانی شوند)

سینکتس

برای تعریف یک متد از نوع متدهای کلاسی، از decorator ای به اسم classmethod@ و کلمه cls به جای slef استفاده میکنیم. که cls به یک کلاس مربوط میشود ولی کلمه self به یک شی. شما میتوانید از اسم دیگری به جای cls استفاده کنید اما این نام فراگیرتر است و در طور دوره نیز از آن استفاده خواهیم کرد.

(توجه: همانند متدهای instance، همه متدهای کلاسی حداقل یک آرگومان، آن هم آرگومان cls خواهند داشت)

class MyClass:
    classVariable = 'educative'

    @classmethod
    def demo(cls)
        return cls.classVariable

پیاده‌سازی متد کلاسی را میتوانید در کد زیر ببینید:

class Player:
    teamName = 'Liverpool'  # class variables

    def __init__(self, name):
        self.name = name  # creating instance variables

    @classmethod
    def getTeamName(cls):
        return cls.teamName


print(Player.getTeamName())

در خط هفت، ما از classmethod@ به عنوان decorator برای تعریف متد کلاسی getTeamName استفاده کرده‌ایم. و در خط ۱۲ هم این متد را با استفاده از نام کلاس بدون تعریف شی فراخوانی کردیم.

متدهای استاتیک

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

(متدهای استاتیک را میتوان هم با نام کلاس‌ها و هم با نام اشیا صدا زد)

سینتکس

برای تعریف یک متد استاتیک از staticmethod@ به عنوان decorator استفاده میشود. در اینجا نیازی به cls یا self نداریم چراکه مربوط به شی یا کلاس نیستند. هر تعداد که نیاز باشد میتوان آرگومان‌های ورودی برای آن تعریف کرد تا بدون اینکه ارتباطی با متغیرهای کلاسی و instace ای داشته باشند، عملیات‌هایی را انجام دهد.

class MyClass:

    @staticmethod
    def demo()
        print("I am a static method")

کد زیر نمونه پیاده‌سازی این متدها را میبینید:

class Player:
    teamName = 'Liverpool'  # class variables

    def __init__(self, name):
        self.name = name  # creating instance variables

    @staticmethod
    def demo():
        print("I am a static method.")


p1 = Player('lol')
p1.demo()
Player.demo()

متدهای استاتیک هیچ اطلاعاتی از ویژگی‌های فعلی کلاس ندارند، آنها نمیتوانند ویژگی‌های یک کلاس را تغییر دهند. هدف متدهای استاتیک این است که از پارامترهای آن استفاده کنیم و یک خروجی مطلوب را از آن دریافت کنیم.

فرض کنید که یک کلاسی داریم با اسم bodyInfo. این کلاس اطلاعات جسمانی هر شخص را ذخیره دارد. میتوانیم یک متد استاتیک برای محاسبه مقدار BMI برای هر وزن و قد داده شده محاسبه کنیم.

class BodyInfo:

    @staticmethod
    def bmi(weight, height):
        return weight / (height**2)


weight = 75
height = 1.8
print(BodyInfo.bmi(weight, height))

این همه چیزهایی بود که ما در مورد متدهای کلاسی و استاتیک فراگرفتیم. در درس بعدی در مورد دسترسی‌های اصلاح‌کننده یاد خواهیم گرفت.

نوشته های مشابه

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا