Diferencia entre @staticmethod y @classmethod en Python

Python @staticmethod y @classmethod : Aquí, vamos a aprender lo son la diferencia entre @staticmethod y @classmethod en Python?

El @classmethod decorador

El @classmethod decorador es un decorador función incorporada que consigue evalúa después se define la función. El resultado de la evaluación sombras la definición de función. El primer argumento de @ classmethod es siempre una class cls , similar a un método de instancia que recibe uno mismo como primer argumento.

Sintaxis:

    Class ABC(object):
@classmethod
def function(cls, arg1, ...):
...

  • existe para crear métodos class que se pasan con el objeto class real dentro de la llamada a la función.
  • unido a la class y no a una instancia.
  • se puede modificar el estado class y que se aplicaría en todos los casos.

El @staticmethod decorador

@staticmethods , similar a los métodos class, son métodos que están obligados a class en lugar de su objeto. Sin embargo, ellos no requieren una creación de la instancia class. Por lo tanto, no dependen del estado del objeto.

Sintaxis:

    Class ABC(object):
@staticmethod
def function(arg1, arg2, ...):
...

  • unido a la class y no a una instancia
  • No se puede modificar el estado class

Comparación entre @classmethod y @staticmethod

class método método
class

Toma cls como primer parámetro no necesita parámetros específicos
acceso Can o modificar el estado Class no se puede acceder al estado Static
deben tener parámetros no sabe nada sobre el estado class. Son similares a los métodos de utilidad.

ejemplo de implementación de @classmethod y @staticmethod

class City: 
def __init__(self, zip_code, name):
self.zip_code = name
self.name = name
# a class method to create a city object.
@classmethod
def city_name(cls, zip_code, name):
return cls(zip_code, name)
# a static method to check if a city is capital or not
@staticmethod
def isCapital(city_name):
if city_name == 'bengaluru':
return True
if __name__ == '__main__':
bengaluru = City(560086, 'bengaluru')
mysuru = City.city_name(560111, 'mysuru')
print("city is {}".format(bengaluru.name))
print("city is {}".format(mysuru.name))
print("Bengaluru is capital :{}".format(City.isCapital('bengaluru')))

salida

city is bengaluru
city is mysuru
Bengaluru is capital : True


Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *