English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

浅谈python中的实例方法、类方法和静态方法

Quando si studia il codice Python, si vede che il primo parametro di alcuni metodi delle classi e' cls, mentre in altri e' self. Dopo aver capito, si scopre che Python non limita il nome del primo parametro dei metodi della classe, puo' essere self o cls. Tuttavia, secondo l'uso comune, self viene generalmente utilizzato nei metodi di istanza, mentre cls viene generalmente utilizzato nei metodi di classe, e non e' necessario utilizzare un parametro predefinito nei metodi statici. Nei codici seguenti, i metodi della classe InstanceMethod hanno come primo parametro il self predefinito, in questo caso e' possibile sostituire self con qualsiasi altro nome senza alcun impatto. Quando si chiama la classe, devono essere soddisfatte le richieste del numero di parametri (con l'eccezione di *args). Ad esempio, nella riga 13, se la classe viene chiamata senza parametri, viene visualizzato un errore. Allo stesso modo, il numero di parametri dei metodi di istanza deve soddisfare le richieste, ad esempio nella riga 16 verra' visualizzato un errore. Un carattere principale dei metodi di istanza e' che devono essere associati a un oggetto, il parser Python passing automaticamente l'oggetto istanza al metodo, come mostrato alla riga 14, e non e' possibile chiamare il metodo direttamente come InstanceMethod.f1().

 class InstanceMethod(object):
 def __init__(self, a):
  self.a = a
 def f1(self):
  print 'This is {0}.'.format(self)
 def f2(self, a):
  print 'Value:{0}'.format(a)
if __name__ == '__main__':
 # im = InstanceMethod()
 im = InstanceMethod('233')
 im.f1()
 # im.f2()
 im.f2(233)

Sia i metodi statici che i metodi di classe devono utilizzare decoratori, rispettivamente, @staticmethod e @classmethod.I metodi statici non hanno nulla a che vedere con la classe, penso che siano metodi generali racchiusi nella classe, come negli esempi seguenti, è possibile chiamare i metodi statici sia utilizzando l'istanza che senza utilizzarla. Nei metodi di classe, il primo parametro predefinito utilizzato è cls, i metodi di classe possono anche essere chiamati direttamente sulla classe senza l'istanza. Per questi tre metodi diversi, l'uso è come mostrato negli esempi. Allora la domanda è, se esistono i metodi di istanza, quali sono i vantaggi dei metodi di classe e dei metodi statici rispetto a questi ultimi?

Nelle funzioni di classe, sia che si utilizzi la chiamata di metodo dell'istanza o quella della classe, viene sempre passato come primo parametro la classe stessa. Questo parametro rappresenta la classe stessa. Se una classe ha ereditato questa funzione di classe, tutte le sue sottoclassi avranno questa funzione e questa funzione si dirigerà automaticamente verso la sottoclasse stessa, una caratteristica molto utile nelle funzioni di fabbrica. I metodi statici non hanno nulla a che vedere con la classe o l'istanza e possono essere sostituiti da metodi generali, ma l'uso dei metodi statici può organizzare meglio il codice e prevenire che il codice diventi caotico quando diventa più grande. I metodi di classe possono sostituire i metodi statici. I metodi statici non possono essere modificati nell'ereditarietà.

class test(object):
 def instance_method(self):
  print 'This is {0}'.format(self)
 @staticmethod
 def static_method():
  print 'This is static method.'
 @classmethod
 def class_method(cls):
  print 'This is {0}'.format(cls)
if __name__ == '__main__':
 a = test()
 a.instance_method()
 a.static_method()
 a.class_method()
 print '----------------------------------------'
 # test.instance_method()
 test.static_method()
 test.class_method()

Questo è tutto il contenuto dell'articolo, spero che il contenuto di questo articolo possa essere di aiuto alla tua apprendimento o lavoro, e spero anche di ricevere più supporto per il tutorial urlaio!

Dichiarazione: il contenuto di questo articolo è stato tratto da Internet, è di proprietà del rispettivo autore, il contenuto è stato contribuito volontariamente dagli utenti di Internet e caricato autonomamente, questo sito non detiene i diritti di proprietà, non è stato editato manualmente e non assume alcuna responsabilità legale. Se trovi contenuti sospetti di violazione del copyright, invia una e-mail a notice#oldtoolbag.com (sostituisci # con @) per segnalare il problema e fornire prove pertinenti. Una volta verificata la veridicità, questo sito rimuoverà immediatamente il contenuto sospetto di violazione del copyright.