Heim  >  Artikel  >  Backend-Entwicklung  >  Statische Methoden und Klassenmitglieder in Python

Statische Methoden und Klassenmitglieder in Python

高洛峰
高洛峰Original
2017-03-01 11:56:381440Durchsuche

Vorwort

Da sich die Python-Ebene derzeit im nutzbaren Stadium befindet, sind die Skripte, die ich normalerweise mit Python schreibe, relativ einfach und ich habe noch nie ein etwas größeres Projekt geschrieben. Es besteht immer noch ein Mangel an Verständnis für Klassen in Python, die organisatorischen Beziehungen zwischen Klassen und wie Klassen im gesamten Projekt gekoppelt sind. Ich habe vor, von anderen geschriebenen Python-Code zu lesen, um die Anwendung von Python im Ingenieurwesen zu erlernen und mein technisches Niveau zu verbessern. Der ausgewählte Python-Code ist der Python-Crawler-Code, die Github-Adresse. Dieser Code entspricht gerade dem Codeniveau, das außerhalb meiner Komfortzone liegt, und ist daher für mein aktuelles Lernniveau sehr gut geeignet.

Nach Python 2.4 werden Dekoratoren hauptsächlich zur Implementierung statischer Methoden und Klassenmethoden verwendet.

Der Dekorateur verwendet den @-Operator. Das Beispiel lautet wie folgt:

class Example:
 val1 = "Value 1"
 def __init__(self):
 self.val2 = "Value 2"

 @staticmethod
 def staticmd():
 print("静态方法,无法访问Value1和Value2")

 @classmethod
 def classmd(cls):
 print('类方法,类:'+str(cls)+",val1:"+cls.val1+",无法访问val2的值")


example = Example()
example.staticmd() #实例调用静态方法,无法访问实例变量val1和val2
example.classmd() #实例调用类方法,输出结果:类方法,类:<class &#39;__main__.Example&#39;>,val1:Value 1,无法访问val2的值
Example.classmd() #类调用类方法,输出结果:类方法,类:<class &#39;__main__.Example&#39;>,val1:Value 1,无法访问val2的值
example.val1 = "The instance value1 changed"
example.classmd() #类调用类方法,输出结果:类方法,类:<class &#39;__main__.Example&#39;>,val1:Value 1,无法访问val2的值
Example.val1 = "The class value2 changed"
example.classmd() #类调用类方法,输出结果:类方法,类:<class &#39;__main__.Example&#39;>,val1:The class value2 changed,无法访问val2的值
Example.classmd() #类调用类方法,输出结果:类方法,类:<class &#39;__main__.Example&#39;>,val1:The class value2 changed,无法访问val2的值

Ich glaube, es kann leicht gelöst werden Aus dem obigen Beispiel wird der Unterschied zwischen statischen Methoden und Klassenmethoden klar unterschieden.

Der erste ist der Unterschied in der Syntax:

  • Statische Methoden müssen den self-Parameter nicht übergeben, und Klassenmitgliedsmethoden müssen den übergeben cls-Parameter, der diese Klasse darstellt;

  • Statische Methoden können auf Instanzvariablen und Klassenvariablen zugreifen, aber auf Klassenvariablen

    Verwendeter Unterschied:

Da statische Methoden nicht auf Klassenattribute zugreifen können, entsprechen Instanzattribute einer relativ unabhängigen Methode und haben nichts mit der Klasse zu tun. Auf diese Weise sind statische Methoden nur Funktionen im Gültigkeitsbereich der Klasse.

Weitere Artikel zu statischen Methoden und Klassenmitgliedern in Python finden Sie auf der chinesischen PHP-Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn