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

Tutorial básico do Python

Controle de fluxo do Python

Função do Python

Tipos de Dados do Python

Operação de arquivo do Python

Objetos e classes do Python

Data e hora do Python

Conhecimento avançado do Python

Manual de referência do Python

Método de uso do staticmethod() do Python e exemplo

Funções Integradas do Python

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

staticmethod()的语法为:

staticmethod(function)

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

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

@staticmethod的语法为:

@staticmethod
def func(args, ...)

staticmethod()参数

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

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

staticmethod()返回值

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

什么是静态方法?

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

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

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

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

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

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

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

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

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

什么时候使用静态方法?

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

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

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

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

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.

2.Implementação Única

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.

Exemplo3:Como a herança funciona com métodos estáticos?

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.

Funções Integradas do Python