2011-01-06 7 views
155

Perché a volte è utilizzato cls anziché self come argomento nelle classi Python?Qual è la variabile 'cls' usata nelle classi Python?

Ad esempio:

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) 

risposta

46

E 'utilizzato in caso di un metodo di classe. Controllare this reference per ulteriori dettagli.

MODIFICA: come chiarito da Adrien, è una convenzione. È possibile utilizzare qualsiasi cosa tranne cls e self (PEP8).

173

La distinzione tra "self" e "cls" è definita in PEP 8. Come ha detto Adrien, questo non è obbligatorio. È uno stile di codifica. PEP 8 dice:

di metodi e funzioni argomenti:

Utilizzare sempre self per il primo argomento a metodi di istanza.

Utilizzare sempre cls per il primo argomento per i metodi di classe.

2

Questa è una domanda molto buona ma non tanto volendo come domanda. C'è differenza tra 'sé' e metodo usato 'cls' però analogicamente sono al stesso luogo

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

ora si può vedere entrambi sono funzione di luna, ma uno può essere utilizzato all'interno di classe, mentre l'altra funzione nome luna può essere utilizzata per qualsiasi classe.

Per pratico approccio di programmazione:

Durante la progettazione di classe cerchio usiamo metodo zona come CLS invece di sé, perché non vogliamo area da essere limitata a particolari classi di solo cerchio.

Problemi correlati