English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Python basic tutorial

Python flow control

الوظائف في بايثون

أنواع البيانات في بايثون

Python file operations

Python objects and classes

Python date and time

Advanced knowledge of Python

Python reference manual

Python staticmethod() usage and example

Python 内置函数

staticmethod() built-in function returns a static method for the given function.

staticmethod() syntax is:

staticmethod(function)

استخدام staticmethod() يعتبر طريقة غير معيارية لإنشاء الوظائف الثابتة في Python.

لذلك، في الإصدارات الأحدث من Python، يمكنك استخدام مُزين @staticmethod.

قواعد النصب لـ @staticmethod

الطريقة الثابتة
def func(args, ...)

معاملات staticmethod()

staticmethod() تأخذ معاملًا واحدًا فقط:

  • function - تحتاج إلى تحويلها إلى طريقة ثابتة

مخرجات staticmethod()

staticmethod() تعود طريقة ثابتة للوظيفة التي يتم تقديمها كمعامل.

ما هي الطريقة الثابتة؟

الطريقة الثابتة معالطريقة الكلاسيكيةمماثلة جدًا، هي طرق مرتبطة بالفئة وليس بالنموذج.

لا تحتاج إلى إنشاء نموذج للفئة. لذلك، لا تعتمد على حالة النموذج.

الفرق بين الطريقة الثابتة والطريقة الكلاسيكية هو:

  • لا تعلم الطريقة الثابتة أي شيء عن الفئة، بل تتعامل فقط مع المعاملات.

  • تستخدم الطرق الثابتة مع الفئة، لأن معاملاتها دائمًا هي الفئة نفسها.

يمكن تفعيلها من خلال الفئة أو عبر الأشخاص.

Class.staticmethodFunc()
أو حتى
Class().staticmethodFunc()

مثال 1: إنشاء طريقة ثابتة باستخدام staticmethod()

class Mathematics:
    def addNumbers(x, y):
        return x + y
# إنشاء طريقة ثابتة addNumbers
Mathematics.addNumbers = staticmethod(Mathematics.addNumbers)
print('العدد الإجمالي:', Mathematics.addNumbers(5, 10))

النتائج الصادرة

العدد الإجمالي هو: 15

متى تستخدم الطريقة الثابتة؟

1. تجميع وظائف مفيدة في فئة

يوجد تحديدات في استخدام الطرق الثابتة، لأن مثل الطرق أو أي طريقة أخرى في الفئة، لا يمكن للطرق الثابتة الوصول إلى خصائص الفئة نفسها.

لكن عندما تحتاج إلى وظيفة مفيدة لا تصل إلى أي خصائص للفئة ولكن تعلم أن هذه الوظيفة تنتمي إلى هذه الفئة، سنستخدم الطريقة الثابتة.

مثال 2: إنشاء وظيفة مفيدة كطريقة ثابتة

فئة Dates:
    def __init__(self, date):
        self.date = date
        
    def getDate(self):
        عدد دقائق self.date
    الطريقة الثابتة
    def toDashDate(date):
        عدد دقائق date.replace("/", "-")
date = Dates("15-12-2016")
dateFromDB = "15/12/2016"
dateWithDash = Dates.toDashDate(dateFromDB)
إذا (date.getDate() == dateWithDash):
    print("مجرد")
else:
    print("غير متساوي")

النتائج الصادرة

مجرد

في هذا المكان، لدينا فئة Dates مخصصة فقط للتواريخ المميزة بالشرطة السفلية (-). ولكن في قاعدة بياناتنا السابقة، كانت كل التواريخ تعبر عنها بالشرطة العلوية.

لتحويل تاريخ السطر إلى تاريخ يحتوي على شرطي (-)، قمنا بإنشاء دالة مفيدة في toDashDate في Dates.

هذه هي الطريقة الثابتة لأنها لا تحتاج إلى الوصول إلى أي خصائص لـ Dates نفسها، بل تحتاج فقط إلى المعاملات.

يمكننا أيضًا إنشاؤها خارج فئة toDashDate، ولكن نظرًا لأنها تنطبق فقط على التواريخ، فإن الاحتفاظ بها داخل فئة Dates هو منطقي.

2. تنفيذ واحد

عندما لا نريد أن تغير/تعيد كتابة تنفيذ طريقة معينة في فرعية الفئة، يمكننا استخدام الطريقة الثابتة.

مثال 3: كيف يمكن للوراثة العمل مع الطرق الثابتة؟

فئة Dates:
    def __init__(self, date):
        self.date = date
        
    def getDate(self):
        عدد دقائق self.date
    الطريقة الثابتة
    def toDashDate(date):
        عدد دقائق date.replace("/", "-")
فئة DatesWithSlashes(Dates):
    def getDate(self):
        عدد دقائق toDashDate(self.date)
date = Dates("15-12-2016")
dateFromDB = DatesWithSlashes("15/12/2016")
إذا (date.getDate() == dateFromDB.getDate()):
    print("مجرد")
else:
    print("غير متساوي")

النتائج الصادرة

مجرد

في هذا السياق، لا نريد أن تغطي فئة الفرعية DatesWithSlashes الطريقة المفيدة toDashDate، لأن لها استخدامًا واحدًا فقط، وهو تحويل date إلى dash-date.

من خلال إعادة كتابة طريقة getDate() في فئة الفرعية، يمكننا بسهولة استخدام الطريقة الثابتة لاستغلال مزاياها، مما يسمح لها بالعمل بشكل طبيعي مع فئة DatesWithSlashes.

Python 内置函数