Verschil tussen ‘cls’ en ‘self’ in Python-klassen?

Waarom wordt clssoms gebruikt in plaats van selfals argument in Python-klassen?

Bijvoorbeeld:

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)

Antwoord 1, autoriteit 100%

Het onderscheid tussen "self"en "cls"is gedefinieerd in PEP 8. Zoals Adrien al zei, is dit niet verplicht. Het is een codeerstijl. PEP 8zegt:

Functie- en methodeargumenten:

Gebruik altijd selfvoor het eerste argument voor instantiemethoden.

Gebruik altijd clsvoor het eerste argument om methoden te classificeren.


Antwoord 2, autoriteit 22%

clshoudt in dat de methode tot de klasse behoort, terwijl self impliceert dat de methode gerelateerd is aan de instantie van de klasse, daarom is lid met clstoegankelijk via de klassenaam waar als degene met zelf is toegankelijk door instantie van de klasse…het is hetzelfde concept als static memberen non-static membersin java als je van een java-achtergrond komt.


Antwoord 3, autoriteit 17%

Het wordt gebruikt in het geval van een klassenmethode. Bekijk deze referentievoor meer informatie.

EDIT: Zoals Adrien heeft uitgelegd, is het een conventie. Je kunt eigenlijk alles gebruiken, behalve dat clsen selfworden gebruikt (PEP8).


Antwoord 4, autoriteit 7%

Dit is een heel goede vraag, maar niet zo graag als een vraag.
Er is verschil tussen de gebruikte methode ‘zelf’ en ‘cls’, hoewel ze analoog op dezelfde plaats zijn

def moon(self, moon_name):
    self.MName = moon_name
#but here cls method its use is different 
@classmethod
def moon(cls, moon_name):
    instance = cls()
    instance.MName = moon_name

Je kunt nu zien dat beide de maanfunctie zijn, maar de ene kan binnen de klas worden gebruikt, terwijl de andere functienaam voor elke klasse kan worden gebruikt.

Voor praktische programmeerbenadering:

Tijdens het ontwerpen van de cirkelklasse gebruiken we de methode gebiedals cls in plaats van zelf, omdat we niet willen dat het gebied wordt beperkt tot alleen een bepaalde cirkelklasse.


Antwoord 5, autoriteit 2%

In plaats van een self-parameter te accepteren, nemen klassemethoden een cls-parameter die verwijst naar de klasseen niet de objectinstantiewanneer
de methode wordt genoemd.
Aangezien de class-methode alleen toegang heeft tot dit cls-argument, kan het niet
status van objectinstantie wijzigen
. Dat zou toegang tot jezelf vereisen. Klassemethoden kunnen echter nog steeds de klassenstatus wijzigen die voor iedereen geldt
instanties van de klas.

Python-trucs

LEAVE A REPLY

Please enter your comment!
Please enter your name here

ten − nine =

Other episodes