Python función classmethod()
Funciones integradas de Python3
classmethod()Es una función integrada en Python que se utiliza para convertir un método en un método de clase.
Los métodos de clase son métodos que pertenecen a la clase y no a la instancia; el primer parámetro es la clase en sí (generalmente denominado cls). Los métodos de clase pueden acceder a los atributos de la clase, pero no a los atributos de la instancia.
Definición de la palabra: classmethod 是 class method(类方法)的缩写。
Sintaxis básica y parámetros
Formato de sintaxis
classmethod(function)
Descripción de parámetros
- Parámetro function:
- Tipo: objeto de función
- Descripción: la función que se va a convertir en método de clase.
Descripción de la función
- Valor de retornoDevuelve un objeto de método de clase.
- CaracterísticasEl primer parámetro es la clase en sí (cls), no la instancia (self).
Ejemplos
Ejemplo 1: Uso básico
Ejemplo
class MyClass:
class_attr = 0
@classmethod
def increment(cls):
cls.class_attr += 1
return cls.class_attr
@classmethod
def get_count(cls):
return cls.class_attr
# Llamado a través de la clase (no es necesario crear una instancia)
print(MyClass.increment()) # Salida: 1
print(MyClass.increment()) # Salida: 2
print(MyClass.get_count()) # Salida: 2
# También se puede llamar a través de una instancia (pero no es común)
obj = MyClass()
print(obj.increment()) # Salida: 3
class_attr = 0
@classmethod
def increment(cls):
cls.class_attr += 1
return cls.class_attr
@classmethod
def get_count(cls):
return cls.class_attr
# Llamado a través de la clase (no es necesario crear una instancia)
print(MyClass.increment()) # Salida: 1
print(MyClass.increment()) # Salida: 2
print(MyClass.get_count()) # Salida: 2
# También se puede llamar a través de una instancia (pero no es común)
obj = MyClass()
print(obj.increment()) # Salida: 3
Resultado esperado de la ejecución:
1 2 2 3
Análisis del código:
- Los métodos de clase se definen mediante el decorador @classmethod.
- El primer parámetro es cls, que representa la clase en sí.
Ejemplo 2: Método de fábrica
Ejemplo
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
@classmethod
def from_dict(cls, data):
"""Crear objeto desde un diccionario"""
return cls(data['name'], data['age'])
@classmethod
def from_string(cls, s):
"""Crear objeto desde una cadena (formato: name-age)"""
name, age = s.split('-')
return cls(name, int(age))
def __str__(self):
return f"{self.name}, {self.age} años"
# Usando el patrón de fábrica con métodos de clase
p1 = Person.from_dict({'name': 'Tom', 'age': 20})
p2 = Person.from_string("Jerry-25")
print(p1) # Salida: Tom, 20 años
print(p2) # Salida: Jerry, 25 años
def __init__(self, name, age):
self.name = name
self.age = age
@classmethod
def from_dict(cls, data):
"""Crear objeto desde un diccionario"""
return cls(data['name'], data['age'])
@classmethod
def from_string(cls, s):
"""Crear objeto desde una cadena (formato: name-age)"""
name, age = s.split('-')
return cls(name, int(age))
def __str__(self):
return f"{self.name}, {self.age} años"
# Usando el patrón de fábrica con métodos de clase
p1 = Person.from_dict({'name': 'Tom', 'age': 20})
p2 = Person.from_string("Jerry-25")
print(p1) # Salida: Tom, 20 años
print(p2) # Salida: Jerry, 25 años
Resultado esperado de la ejecución:
Tom, 20岁 Jerry, 25岁
Los métodos de clase se utilizan a menudo para implementar métodos de fábrica, creando objetos desde diferentes fuentes de datos.
Funciones integradas de Python3
Otras extensiones