English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
staticmethod()内置函数为给定函数返回静态方法。
staticmethod()的语法为:
staticmethod(function)
使用staticmethod()被认为是创建静态函数的非Python标准方式。
因此,在较新版本的Python中,您可以使用@staticmethod装饰器。
@staticmethod的语法为:
@staticmethod def func(args, ...)
staticmethod()方法采用单个参数:
function -需要转换为静态方法的函数
staticmethod()对于作为参数传递的函数,返回静态方法。
静态方法与类方法非常相似,是绑定到类而不是对象的方法。
它们不需要创建类实例。因此,它们不依赖于对象的状态。
静态方法和类方法之间的区别是:
静态方法对类一无所知,只处理参数。
类方法与类一起使用,因为其参数始终是类本身。
可以通过类及其对象来调用它们。
Class.staticmethodFunc() 或甚至 Class().staticmethodFunc()
class Mathematics: def addNumbers(x, y): return x + y # 创建addNumbers静态方法 Mathematics.addNumbers = staticmethod(Mathematics.addNumbers) print('总数是:', Mathematics.addNumbers(5, 10))
Ausgaberesultat
总数是: 15
静态方法的使用受到限制,因为与类方法或类中的任何其他方法一样,静态方法无法访问类本身的属性。
但是,当您需要一个不访问类的任何属性但知道它属于该类的实用程序函数时,我们将使用静态函数。
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.
Wenn wir nicht möchten, dass die Unterklassen der Klasse ändern/Man kann statische Methoden verwenden, um spezifische Implementierungen von Methoden zu überschreiben.
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.