Método de clase versus método estático en Python

En este artículo, cubriremos los conceptos básicos. diferencia entre el método de clase y el método estático en Python y cuándo usar el método de clase y el método estático en pitón.

¿Qué es el método de clase en Python?

El decorador @classmethod es un decorador de funciones incorporado que es una expresión que se evalúa después de definir la función. El resultado de esa evaluación ensombrece la definición de su función. A método de clase recibe la clase como un primer argumento implícito, al igual que un método de instancia recibe la instancia

Método de clase de Python de sintaxis:

 class C(object):  @classmethod  def fun(cls, arg1, arg2, ...): .... fun: function that needs to be converted into a class method returns: a class method for function. 
  • Un método de clase es un método que está vinculado a la clase y no el objeto de la clase.
  • Tienen acceso al estado de la clase, ya que requiere un parámetro de clase que apunta a la clase y no a la instancia del objeto.
  • Puede modificar el estado de una clase que se aplicaría en todas las instancias de la clase. Por ejemplo, puede modificar una variable de clase que será aplicable a todas las instancias.

¿Qué es el método estático en Python?

Un método estático no recibe un primer argumento implícito. Un método estático también es un método que está vinculado a la clase y no al objeto de la clase. Este método no puede acceder ni modificar el estado de la clase. Está presente en una clase porque tiene sentido que el método esté presente en la clase.

Sintaxis Método estático de Python:

 class C(object):  @staticmethod  def fun(arg1, arg2, ...):  ... returns: a static method for function fun. 

Método de clase vs método estático

La diferencia entre el método Class y el método estático es:

  • Un método de clase toma cls como primer parámetro, mientras que un método estático no necesita parámetros específicos.
  • Un método de clase puede acceder o modificar el estado de la clase, mientras que un método estático no puede acceder a él ni modificarlo.
  • En general, los métodos estáticos no saben nada sobre el estado de la clase. Son métodos de tipo utilidad que toman algunos parámetros y trabajan sobre esos parámetros. Por otro lado, los métodos de clase deben tener la clase como parámetro.
  • Usamos el decorador @classmethod en Python para crear un método de clase y usamos el decorador @staticmethod para crear un método estático en Python.

¿Cuándo utilizar la clase o el método estático?

  • Generalmente usamos el método de clase para crear métodos de fábrica. Los métodos de fábrica devuelven objetos de clase (similares a un constructor) para diferentes casos de uso.
  • Generalmente utilizamos métodos estáticos para crear funciones de utilidad.

¿Cómo definir un método de clase y un método estático?

Para definir un método de clase en Python, usamos el decorador @classmethod, y para definir un método estático usamos el decorador @staticmethod.
Veamos un ejemplo para entender la diferencia entre ambos. Digamos que queremos crear una clase Persona. Ahora, Python no admite la sobrecarga de métodos como C++ o Java, por lo que usamos métodos de clase para crear métodos de fábrica. En el siguiente ejemplo utilizamos un método de clase para crear un objeto de persona a partir del año de nacimiento.

Como se explicó anteriormente, utilizamos métodos estáticos para crear funciones de utilidad. En el siguiente ejemplo utilizamos un método estático para comprobar si una persona es adulta o no.

Un ejemplo sencillo:

método de clase:

Python3




class> MyClass:> > def> __init__(> self> , value):> > self> .value> => value> > def> get_value(> self> ):> > return> self> .value> # Create an instance of MyClass> obj> => MyClass(> 10> )> # Call the get_value method on the instance> print> (obj.get_value())> # Output: 10>

Producción

10 

Método estático:-

Python3




class> MyClass:> > def> __init__(> self> , value):> > self> .value> => value> > @staticmethod> > def> get_max_value(x, y):> > return> max> (x, y)> # Create an instance of MyClass> obj> => MyClass(> 10> )> print> (MyClass.get_max_value(> 20> ,> 30> ))> print> (obj.get_max_value(> 20> ,> 30> ))>

Producción

30 30 

A continuación se muestra la implementación completa.

Python3




# Python program to demonstrate> # use of class method and static method.> from> datetime> import> date> class> Person:> > def> __init__(> self> , name, age):> > self> .name> => name> > self> .age> => age> > # a class method to create a Person object by birth year.> > @classmethod> > def> fromBirthYear(> cls> , name, year):> > return> cls> (name, date.today().year> -> year)> > # a static method to check if a Person is adult or not.> > @staticmethod> > def> isAdult(age):> > return> age>> 18> person1> => Person(> 'mayank'> ,> 21> )> person2> => Person.fromBirthYear(> 'mayank'> ,> 1996> )> print> (person1.age)> print> (person2.age)> # print the result> print> (Person.isAdult(> 22> ))>

Producción:

21 25 True 

Espacio Auxiliar: O(1)