método de classe vs método estático em Python
Método de Classe
O decorador @classmethod, é um decorador de função embutido que é uma expressão que é avaliada depois que sua função é definida. O resultado dessa avaliação obscurece sua definição de função.
Um método de classe recebe a classe como primeiro argumento implícito, assim como um método de instância recebe a Sintaxe de instância
:
classe C (objeto): @classmethod def fun (cls, arg1, arg2, ...): .... diversão: função que precisa ser convertida em um método de classe retorna: um método de classe para função.
- Um método de classe é um método que está vinculado à classe e não ao objeto da classe.
- Eles têm acesso ao estado da classe, pois leva um parâmetro de classe que aponta para a classe e não a instância do objeto.
- Ele pode modificar um estado de classe que se aplicaria a todas as instâncias da classe. Por exemplo, ele pode modificar uma variável de classe que será aplicável a todas as instâncias.
Método Estático
Um método estático não recebe um primeiro argumento implícito.
Sintaxe:
classe C (objeto): @staticmethod def fun (arg1, arg2, ...): ... retorna: um método estático para diversão de função.
- Um método estático também é um método vinculado à classe e não ao objeto da classe.
- Um método estático não pode acessar ou modificar o estado da classe.
- Está presente na aula porque faz sentido que o método esteja presente na aula.
Método de classe vs método estático
- Um método de classe usa cls como primeiro parâmetro, enquanto um método estático não precisa de parâmetros específicos.
- Um método de classe pode acessar ou modificar o estado da classe, enquanto um método estático não pode acessar ou modificá-lo.
- Em geral, os métodos estáticos não sabem nada sobre o estado da classe. Eles são métodos do tipo utilitário que usam alguns parâmetros e funcionam com base nesses parâmetros. Por outro lado, os métodos de classe devem ter classe como parâmetro.
- Usamos o decorador @classmethod em python para criar um método de classe e usamos o decorador @staticmethod para criar um método estático em python.
Quando usar o quê?
- Geralmente usamos o método de classe para criar métodos de fábrica. Os métodos de fábrica retornam o objeto de classe (semelhante a um construtor) para diferentes casos de uso.
- Geralmente usamos métodos estáticos para criar funções de utilidade.
Como definir um método de classe e um método estático?
Para definir um método de classe em python, usamos o decorador @classmethod e para definir um método estático usamos o decorador @staticmethod.
Vejamos um exemplo para entender a diferença entre os dois. Digamos que queremos criar uma classe Person. Agora, o python não oferece suporte à sobrecarga de método como C ++ ou Java, portanto, usamos métodos de classe para criar métodos de fábrica. No exemplo abaixo, usamos um método de classe para criar um objeto pessoa a partir do ano de nascimento.
Conforme explicado acima, usamos métodos estáticos para criar funções de utilidade. No exemplo abaixo, usamos um método estático para verificar se uma pessoa é adulta ou não.
Implementação
from
datetime
import
date
class
Person:
def
__init__(
self
, name, age):
self
.name
=
name
self
.age
=
age
@classmethod
def
fromBirthYear(
cls
, name, year):
return
cls
(name, date.today().year
-
year)
@staticmethod
def
isAdult(age):
return
age >
18
person1
=
Person(
'mayank'
,
21
)
person2
=
Person.fromBirthYear(
'mayank'
,
1996
)
(person1.age)
(person2.age)
(Person.isAdult(
22
))
Resultado
21 21 Verdade
Este artigo é uma contribuição de Mayank Agrawal . Se você gosta de GeeksforGeeks e gostaria de contribuir, você também pode escrever um artigo usando contribute.geeksforgeeks.org ou enviar o seu artigo para contribute@geeksforgeeks.org. Veja o seu artigo que aparece na página principal do GeeksforGeeks e ajude outros Geeks.
Escreva comentários se encontrar algo incorreto ou se quiser compartilhar mais informações sobre o tópico discutido acima.
As postagens do blog Acervo Lima te ajudaram? Nos ajude a manter o blog no ar!
Faça uma doação para manter o blog funcionando.
70% das doações são no valor de R$ 5,00...
Diógenes Lima da Silva