Avant-propos
Étant donné que le niveau de Python est actuellement au stade utilisable, les scripts que j'écris habituellement en utilisant Python sont relativement simples et je n'ai jamais écrit de projet légèrement plus volumineux. Il existe encore un manque de compréhension des classes en Python, des relations organisationnelles entre les classes et de la manière dont les classes sont couplées dans l'ensemble du projet. J'ai l'intention de lire du code Python écrit par d'autres pour apprendre l'application de Python en ingénierie et améliorer mon niveau technique. Le code Python sélectionné est le code du robot Python, adresse github. Ce code correspond juste au niveau de code qui sort de ma zone de confort, il est donc très adapté à mon niveau d'apprentissage actuel.
Après Python 2.4, les décorateurs sont principalement utilisés pour implémenter des méthodes statiques et des méthodes de classe.
Le décorateur utilise l'opérateur @. L'exemple est le suivant :
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的值
Je pense que cela peut être facilement résolu. à partir de l'exemple ci-dessus, la différence entre les méthodes statiques et les méthodes de classe est clairement distinguée.
La première est la différence de syntaxe :
Les méthodes statiques n'ont pas besoin de transmettre le paramètre self, et les méthodes membres de la classe doivent transmettre le paramètre self. paramètre cls représentant cette classe ;
Les méthodes statiques peuvent accéder aux variables d'instance et aux variables de classe. Les méthodes membres de la classe ne peuvent pas accéder aux variables d'instance mais peuvent accéder aux variables de classe.
Différence utilisée :Étant donné que les méthodes statiques ne peuvent pas accéder aux attributs de classe, les attributs d'instance sont équivalents à une méthode relativement indépendante et n'ont rien à voir avec la classe. De cette façon, les méthodes statiques ne sont que des fonctions dans le cadre de la classe.