Waarom wordt cls
soms gebruikt in plaats van self
als 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 8
zegt:
Functie- en methodeargumenten:
Gebruik altijd
self
voor het eerste argument voor instantiemethoden.Gebruik altijd
cls
voor het eerste argument om methoden te classificeren.
Antwoord 2, autoriteit 22%
cls
houdt 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 cls
toegankelijk via de klassenaam waar als degene met zelf is toegankelijk door instantie van de klasse…het is hetzelfde concept als static member
en non-static members
in 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 cls
en self
worden 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