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))
Resultados de Saída
总数是: 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) se(date.getDate() == dateWithDash): print("Igual") else: print("Desigual")
Resultados de Saída
Igual
Aqui, temos um Dates que só se aplica a datas com traço (-)em classe de data. Mas, em nossos bancos de dados anteriores, todas as datas estavam representadas por barras.
Para converter datas com traço (-)Data, criamos uma função utilitária toDashDate dentro de Dates.
É um método estático, pois não precisa acessar nenhuma propriedade da Dates própria, apenas os parâmetros.
Também podemos criar fora da classe toDashDate, mas é lógico mantê-la dentro da classe Dates, pois ela se aplica apenas a datas.
Quando não queremos que a subclasse da classe altere/Pode-se usar métodos estáticos ao reescrever implementações específicas de métodos.
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("Igual") else: print("Desigual")
Resultados de Saída
Igual
Aqui, não queremos que a subclasse DatesWithSlashes sobreponha o método utilitário estático toDashDate, pois ele tem apenas um uso, alterar date para traço.-date。
Ao reescrever o método getDate() na subclasse, podemos usar facilmente métodos estáticos para explorar nossos próprios pontos fortes, permitindo que funcionem corretamente com a classe DatesWithSlashes.