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)
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.
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 ).
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.
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.