2011-01-06 8 views
155

¿Por qué se usa a veces cls en lugar de self como argumento en las clases de Python?¿Para qué se usa la variable 'cls' 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) 

Respuesta

46

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

EDITAR: Como aclaró Adrien, es una convención. En realidad puede usar cualquier cosa excepto cls y self se usan (PEP8).

173

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

funciones y métodos argumentos:

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

Utilice siempre cls para el primer argumento de los métodos de clase.

2

Esta es una muy buena pregunta, pero no tanto como una pregunta. Hay diferencia entre 'yo' y el método 'cls' utilizado aunque analógicamente que están en un 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 se puede ver que ambos son función de la luna pero se puede utilizar dentro de la clase, mientras otro nombre de función moon se puede usar para cualquier clase.

Para enfoque práctico de programación:

bien el diseño de la clase círculo utilizamos método del área como CLS en lugar de uno mismo, porque no queremos área que se limita a una clase particular de sólo el círculo.

Cuestiones relacionadas