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

Kurzdiskussion über Instanzmethoden, Klassenmethoden und statische Methoden in Python

Beim Lernen von Python-Code sehe ich, dass der erste Parameter in einigen Methoden von Klassen cls ist, in anderen jedoch self. Nach Ermittlung wurde festgestellt, dass Python keine Beschränkungen für den Namen des ersten Parameters in Methoden von Klassen vorsieht; er kann self oder cls sein. Allerdings wird self in der Regel in Instanzmethoden verwendet, während cls in Klassemethoden und in statischen Methoden nicht unbedingt ein Standardparameter benötigt wird. In den folgenden Codezeilen ist der erste Parameter der Klasse InstanceMethod standardmäßig self, und man kann self in diesem Fall durch jeden anderen Namen ersetzen, ohne dass es zu irgendwelchen Auswirkungen kommt. Beim Aufruf der Klasse müssen die Anforderungen an die Anzahl der Parameter erfüllt werden (Parameter enthalten*args是例外),例如13args ist eine Ausnahme), zum Beispiel}}16zeigt, dass auch bei der Klasseaufruf ohne Parameter ein Fehler auftritt. Ebenso sollten die Anzahl der Parameter der Beispielmethoden den Anforderungen entsprechen, zum Beispiel14zeigt, dass direkt mit InstanceMethod.f1Methodeaufrufe sind nicht zulässig.

 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)

Beide statische und Klassenmethoden benötigen Dekoratoren, die分别是staticmethod und classmethod.Statistische Methoden haben nichts mit der Klasse zu tun, ich denke, sie sind allgemeine Methoden, die in der Klasse verpackt sind, wie im folgenden Beispiel, es ist möglich, statische Methoden sowohl mit als auch ohne Beispiel aufzurufen. In Klassenmethoden wird der Standard-Parameter cls verwendet, Klassenmethoden können auch ohne Beispiel direkt mit der Klasse aufgerufen werden. Für diese drei verschiedenen Methoden ist die Verwendung wie im folgenden Beispiel gezeigt. Aber was sind die Vorteile dieser drei Methoden im Vergleich zu den Beispielmethoden?

In Methoden der Klasse wird, ob die Methode mit einem Beispiel oder einer Klasse aufgerufen wird, immer die Klasse als ersten Parameter übergeben, dieser Parameter ist die Klasse selbst. Wenn eine Klasse, die diese Methode verwendet, vererbt wird, besitzt alle Unterklassen dieser Klasse diese Methode und diese Methode wird automatisch auf die Unterklasse selbst verweisen, was in Factory-Funktionen sehr nützlich ist. Statistische Methoden haben nichts mit der Klasse oder dem Beispiel zu tun und können vollständig durch allgemeine Methoden ersetzt werden, aber die Verwendung von statischen Methoden kann das Code-Organisieren verbessern und verhindern, dass der Code nach der Erweiterung relativ durcheinander wird. Klassenmethoden können statische Methoden ersetzen. Statistische Methoden können im Erben nicht geändert werden.

class test(object):
 def instance_method(self):
  print 'Dies ist {0}'.format(self)
 @staticmethod
 def static_method():
  print 'Dies ist eine statische Methode.'
 @classmethod
 def class_method(cls):
  print 'Dies ist {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()

Das ist der gesamte Inhalt dieses Artikels, ich hoffe, dass der Inhalt dieses Artikels Ihnen bei Ihrem Lernen oder Ihrer Arbeit hilft und ich hoffe auch, dass Sie die Anleitung 'Ruf' mehr unterstützen!

Erklärung: Der Inhalt dieses Artikels wurde aus dem Internet übernommen und gehört dem Urheberrechtlichem Eigentümer, der Inhalt wurde von Internetbenutzern freiwillig beigesteuert und hochgeladen, diese Website besitzt keine Eigentumsrechte, hat den Inhalt nicht manuell bearbeitet und trägt keine rechtlichen Verantwortlichkeiten. Wenn Sie urheberrechtlich relevante Inhalte finden, freuen wir uns über die E-Mail-Benachrichtigung an: notice#w3Hinweis: Bitte ersetzen Sie im E-Mail-Versand # durch @ und melden Sie hierfür Missbrauch, und fügen Sie relevante Beweise bei. Sobald nachgewiesen, wird diese Website den mutmaßlich urheberrechtswidrigen Inhalt sofort löschen.

Empfohlen für Sie