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 '__main__.Example'>,val1:Value 1,无法访问val2的值 Example.classmd() #类调用类方法,输出结果:类方法,类:<class '__main__.Example'>,val1:Value 1,无法访问val2的值 example.val1 = "The instance value1 changed" example.classmd() #类调用类方法,输出结果:类方法,类:<class '__main__.Example'>,val1:Value 1,无法访问val2的值 Example.val1 = "The class value2 changed" example.classmd() #类调用类方法,输出结果:类方法,类:<class '__main__.Example'>,val1:The class value2 changed,无法访问val2的值 Example.classmd() #类调用类方法,输出结果:类方法,类:<class '__main__.Example'>,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.