¿Para qué se usa la variable ‘cls’ en las clases de Python?

¿Por qué a veces se usa cls lugar de self como un argumento en las clases de Python?

Por ejemplo:

 class Person: def __init__(self, firstname, lastname): self.firstname = firstname self.lastname = lastname @classmethod def from_fullname(cls, fullname): cls.firstname, cls.lastname = fullname.split(' ', 1) 

La distinción entre "self" y "cls" se define en PEP 8 . Como dijo Adrien, esto no es obligatorio. Es un estilo de encoding. PEP 8 dice:

Argumentos de función y método :

Siempre use self para el primer argumento de los métodos de instancia.

Siempre use cls para el primer argumento de los métodos de clase.

Se utiliza en caso de un método de clase. Compruebe esta referencia para más detalles.

EDIT: como aclaró Adrien, es una convención. Puede usar cualquier cosa, excepto cls y self ( PEP8 ).

cls implica que el método pertenece a la clase, mientras que self implica que el método está relacionado con la instancia de la clase, por lo que se accede al miembro con cls por el nombre de la clase, mientras que a la clase con self se accede por la instancia de la clase … es la el mismo concepto que static member y los static member non-static members en java si usted es de fondo java.

Esta es una pregunta muy buena, pero no tan buena como la pregunta. Hay una diferencia entre el método utilizado por ‘self’ y ‘cls’ aunque analógicamente están en el mismo lugar

 def moon(self,moon_name): self.MName =moon_name #but here cls method its use is different def moon(cls,moon_name): instance=cls() instance.MName=moon_name 

Ahora puede ver que ambas son funciones de la luna, pero una puede usarse dentro de la clase, mientras que el otro nombre de la función luna se puede usar para cualquier clase.

Para un enfoque práctico de progtwigción:

Al diseñar la clase de círculo, usamos el método de área como cls en lugar de uno mismo, porque no queremos que el área se limite solo a una clase particular de círculo.