¿Diferencia entre 'cls' y 'self' en las clases de Python?
¿ Por qué cls
a veces se usa en lugar de self
como 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 codificación. PEP 8
dice:
Argumentos de función y método :
Úselo siempre
self
como primer argumento para instanciar métodos.Úselo siempre
cls
como primer argumento de los métodos de clase.
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 tanto, cls
se accede al miembro con por el nombre de la clase, mientras que al que tiene self se accede por instancia de la clase... es el mismo concepto como static member
y non-static members
en java si tienes experiencia en java.