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

Einführung in Python

Flusskontrolle in Python

Python-Funktion

Python-Datentypen

Dateioperationen in Python

Objekte und Klassen in Python

Datum und Zeit in Python

Hochwertiges Wissen in Python

Python Referenzhandbuch

Verwendung und Beispiel von Python staticmethod()

Python-eingebaute Funktionen

staticmethod()内置函数为给定函数返回静态方法。

staticmethod()的语法为:

staticmethod(function)

使用staticmethod()被认为是创建静态函数的非Python标准方式。

因此,在较新版本的Python中,您可以使用@staticmethod装饰器。

@staticmethod的语法为:

@staticmethod
def func(args, ...)

staticmethod()参数

staticmethod()方法采用单个参数:

  • function -需要转换为静态方法的函数

staticmethod()返回值

staticmethod()对于作为参数传递的函数,返回静态方法。

什么是静态方法?

静态方法与类方法非常相似,是绑定到类而不是对象的方法。

它们不需要创建类实例。因此,它们不依赖于对象的状态。

静态方法和类方法之间的区别是:

  • 静态方法对类一无所知,只处理参数。

  • 类方法与类一起使用,因为其参数始终是类本身。

可以通过类及其对象来调用它们。

Class.staticmethodFunc()
或甚至
Class().staticmethodFunc()

Beispiel1:使用staticmethod()创建一个静态方法

class Mathematics:
    def addNumbers(x, y):
        return x + y
# 创建addNumbers静态方法
Mathematics.addNumbers = staticmethod(Mathematics.addNumbers)
print('总数是:', Mathematics.addNumbers(5, 10))

Ausgaberesultat

总数是: 15

什么时候使用静态方法?

1.将实用程序功能分组到一个类

静态方法的使用受到限制,因为与类方法或类中的任何其他方法一样,静态方法无法访问类本身的属性。

但是,当您需要一个不访问类的任何属性但知道它属于该类的实用程序函数时,我们将使用静态函数。

Beispiel2:将实用程序功能创建为静态方法

class Dates:
    def __init__(self, date):
        self.date = date
        
    def getDate(self):
        return self.date
    @staticmethod
    def toDashDate(date):
        return date.replace("/", "-)
date = Dates("15-12-2016)
dateFromDB = "15/12/2016"
dateWithDash = Dates.toDashDate(dateFromDB)
Wenn(date.getDate() == dateWithDash):
    print("Equal")
else:
    print("Unequal")

Ausgaberesultat

Equal

Hier haben wir eine Klasse Dates, die nur für Bindestrichdaten (-) zu konvertieren, erstellen wir eine Klasse für das Datum.

Um ein Schrägstrichdatum in ein Bindestrichdatum (-)Datum, wir haben eine效用funktion toDashDate in Dates erstellt.

Das ist eine statische Methode, weil sie keine Eigenschaften von Dates selbst benötigt, sondern nur die Parameter.

Wir könnten sie auch außerhalb der Klasse toDashDate erstellen, aber da sie nur für Daten verwendet wird, ist es logisch, sie in der Klasse Dates zu behalten.

2.eine einzige Implementierung

Wenn wir nicht möchten, dass die Unterklassen der Klasse ändern/Man kann statische Methoden verwenden, um spezifische Implementierungen von Methoden zu überschreiben.

Beispiel3:Wie funktioniert die Vererbung zusammen mit statischen Methoden?

class Dates:
    def __init__(self, date):
        self.date = date
        
    def getDate(self):
        return self.date
    @staticmethod
    def toDashDate(date):
        return date.replace("/", "-)
class DatesWithSlashes(Dates):
    def getDate(self):
        return Dates.toDashDate(self.date)
date = Dates("15-12-2016)
dateFromDB = DatesWithSlashes("15/12/2016)
if(date.getDate() == dateFromDB.getDate()):
    print("Equal")
else:
    print("Unequal")

Ausgaberesultat

Equal

Hier möchten wir nicht, dass die Unterklasse DatesWithSlashes die statische Utility-Methode toDashDate überschreibt, da sie nur einen Zweck hat, den date in einen Bindestrich zu ändern-date.

Durch Überschreiben der Methode getDate() im Unterklassenkonstruktor können wir problemlos statische Methoden nutzen, um unsere eigenen Vorteile zu nutzen und sie mit der Klasse DatesWithSlashes normal zusammenzuarbeiten.

Python-eingebaute Funktionen