web-dev-qa-db-fra.com

A quoi sert la variable 'cls' dans les classes Python?

Pourquoi cls est-il parfois utilisé à la place de self comme argument dans les classes Python?

Par exemple:

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)
226
Scaraffe

La distinction entre _"self"_ et _"cls"_ est définie dans PEP 8 . Comme Adrien l'a dit, ce n'est pas une obligation. C'est un style de codage. _PEP 8_ dit:

Arguments de fonction et de méthode :

Utilisez toujours self pour le premier argument des méthodes d'instance.

Utilisez toujours cls pour le premier argument des méthodes de classe.

250
Baskaya

Il est utilisé dans le cas d'une méthode de classe. Vérifiez cette référence pour plus de détails.

EDIT: Comme le précise Adrien, il s’agit d’une convention. Vous pouvez réellement utiliser n'importe quoi sauf cls et self sont utilisés ( PEP8 ).

50
Juho Vepsäläinen

cls implique que la méthode appartient à la classe, alors que self implique que la méthode est liée à une instance de la classe. Par conséquent, le membre avec cls est accessible par nom de classe, alors que celui avec self est accessible par instance de la classe ... c'est le même concept que static member et non-static members dans Java si vous êtes de Java arrière-plan.

31
abdilatif bashir

C'est une très bonne question, mais pas aussi désirable qu'une question. Il y a une différence entre les méthodes 'self' et 'cls', bien qu'analogiquement elles se trouvent au même endroit

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

Maintenant, vous pouvez voir que les deux fonctions sont lunaires, mais l’une peut être utilisée à l’intérieur de la classe, tandis que l’autre nom de fonction lune peut être utilisé pour n’importe quelle classe.

Pour une approche de programmation pratique:

Lors de la conception de la classe de cercle, nous utilisons la méthode area comme cls au lieu de self, car nous ne voulons pas que la zone soit limitée à une classe de cercle particulière.

14
TheExorcist