Warum wird cls
manchmal anstelle von self
als Argument in Python Klassen verwendet?
Zum Beispiel:
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)
Die Unterscheidung zwischen "self"
und "cls"
ist definiert in PEP 8
. Wie Adrien sagte, ist dies kein Muss. Es ist ein Codierungsstil. PEP 8
sagt:
Funktions- und Methodenargumente :
Verwenden Sie immer
self
als erstes Argument für Instanzmethoden.Verwenden Sie immer
cls
als erstes Argument für Klassenmethoden.
Es wird im Fall einer Klassenmethode verwendet. Überprüfen Sie diese Referenz für weitere Details.
EDIT: Wie von Adrien klargestellt, ist es eine Konvention. Sie können tatsächlich alles andere als cls
und self
verwenden ( PEP8 ).
cls
impliziert, dass die Methode zur Klasse gehört, während self impliziert, dass sich die Methode auf die Instanz der Klasse bezieht. Daher wird auf das Mitglied mit cls
über den Klassennamen zugegriffen, auf das mit self zugegriffen wird Instanz der Klasse ... es ist das gleiche Konzept wie static member
und non-static members
in Java wenn Sie aus Java Hintergrund sind.
Das ist eine sehr gute Frage, aber nicht so fragwürdig. Es gibt einen Unterschied zwischen der verwendeten Methode 'self' und 'cls', obwohl sie sich analog an derselben Stelle befinden
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
Jetzt können Sie sehen, dass beide Funktionen Mondfunktion sind, aber eine innerhalb der Klasse verwendet werden kann, während der andere Funktionsname Mond für jede Klasse verwendet werden kann.
Für den praktischen Programmieransatz:
Beim Entwerfen der Kreisklasse verwenden wir die Methode area als cls anstelle von self, da die Fläche nicht nur auf eine bestimmte Kreisklasse beschränkt sein soll.