رفتن به محتوای اصلی
برنامه‌سازی پیشرفته با پایتون درس‌نامهٔ آزاد
مفهوم متوسط ۷ دقیقه

متد کلاس و متد ایستا

تفاوت classmethod و staticmethod، سازندهٔ جایگزین و حفظ چندریختی در ارث‌بری.

class Date:
    def __init__(self, y, m, d):
        self.y, self.m, self.d = y, m, d

    @classmethod
    def from_string(cls, text):
        y, m, d = map(int, text.split("-"))
        return cls(y, m, d)  # cls یعنی «همین کلاسی که صدا زده شد»

    @staticmethod
    def is_leap(year):
        return year % 4 == 0 and (year % 100 != 0 or year % 400 == 0)

چرا from_string را classmethod کردیم؟ چون اگر زیرکلاسی آن را صدا بزند، cls همان زیرکلاس است و شیء درست ساخته می‌شود — چندریختیِ سطح کلاس. با staticmethod این خاصیت را از دست می‌دادی. staticmethod فقط برای «تابعِ بی‌طرفی که منطقاً مال این کلاس است» (مثل is_leap) به کار می‌رود.

پیش‌نیازها

مطالب مرتبط

از همین بخش و با برچسب‌های مشترک

این مطلب را خواندید؟ آن را علامت بزنید تا پیشرفت شما روی همین دستگاه ذخیره شود.

وضعیت پیشرفت برای متد کلاس و متد ایستا