método de clase() en Python

classmethod () es una función incorporada en Python, que devuelve un método de clase para una función dada;

Sintaxis: classmethod(función)

Parámetro: esta función acepta el nombre de la función como parámetro.

Tipo de devolución: esta función devuelve el método de clase convertido.

También puede usar el decorador @classmethod para la definición de classmethod.

Sintaxis: 

@classmethod
   def fun(cls, arg1, arg2, ...):

Dónde, 

  • diversión: la función que debe convertirse en un método de clase
  • devuelve: un método de clase para la función.

Los métodos classmethod() están vinculados a una clase en lugar de a un objeto. Los métodos de clase pueden ser llamados tanto por clase como por objeto. Estos métodos se pueden llamar con una clase o con un objeto. 

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

  • 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 ni modificarlo.
  • En general, los métodos estáticos no saben nada sobre el estado de la clase. Son métodos de tipo de utilidad que toman algunos parámetros y funcionan 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.

Ejemplo de método de clase en Python

Ejemplo 1: crear un método de clase simple

En este ejemplo, vamos a ver cómo crear un método de clase, para esto creamos una clase con nombre geeks con la variable miembro curso y creamos una función compra que imprime el objeto.

Ahora pasamos el método geeks.purchase a classmethod que convierte los métodos en un método de clase y luego llamamos a la función de clase comprar sin crear un objeto de función.

Python3

class geeks:
    course = 'DSA'
  
    def purchase(obj):
        print("Puchase course : ", obj.course)
  
  
geeks.purchase = classmethod(geeks.purchase)
geeks.purchase()

Producción:

Puchase course :  DSA

Ejemplo 2: crear un método de clase usando classmethod()

Python3

# Python program to understand the classmethod
  
class Student:
  
    # create a variable
    name = "Geeksforgeeks"
  
    # create a function
    def print_name(obj):
        print("The name is : ", obj.name)
  
  
# create print_name classmethod
# before creating this line print_name()
# It can be called only with object not with class
Student.print_name = classmethod(Student.print_name)
  
# now this method can be called as classmethod
# print_name() method is called a class method
Student.print_name()

Producción:

The name is :  Geeksforgeeks

Ejemplo 3: método de fábrica utilizando el método de clase

Los usos de la función classmethod() se usan en patrones de diseño de fábrica donde queremos llamar a muchas funciones con el nombre de la clase en lugar de un objeto.

Python3

# Python program to demonstrate
# use of a 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)
  
    def display(self):
        print("Name : ", self.name, "Age : ", self.age)
  
person = Person('mayank', 21)
person.display()

Producción:

Name :  mayank Age :  21

El decorador @classmethod

El decorador @classmethod es un decorador de funciones incorporado que es una expresión que se evalúa después de definir su función. El resultado de esa evaluación ensombrece la definición de su función. 

Un método de clase recibe la clase como el primer argumento implícito, al igual que un método de instancia recibe la instancia.

Sintaxis:

class C(object):
    @classmethod
    def fun(cls, arg1, arg2, ...):
       ....

Dónde,

  • diversión: la función que debe convertirse en un método de clase
  • devuelve: un método de clase para la función.

Nota:

  • Un método de clase es un método que está vinculado a la clase y no al objeto de la clase.
  • Tienen acceso al estado de la clase ya que toma un parámetro de clase que apunta a la clase y no a la instancia del objeto.
  • Puede modificar un estado de clase que se aplicaría en todas las instancias de la clase. Por ejemplo, puede modificar una variable de clase que sería aplicable a todas las instancias.

En el siguiente ejemplo, usamos un método estático() y un método de clase() para verificar si una persona es adulta o no.

Python

# Python program to demonstrate
# use of a 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

Publicación traducida automáticamente

Artículo escrito por ankit15697 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

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