it-swarm-eu.dev

Wofür wird die Variable 'cls' in Python Klassen verwendet?

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

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.

250
Baskaya

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

50

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.

31

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.

14
TheExorcist