L'exemple auquel je peux penser est que les méthodes de classe sont souvent utilisées en remplacement des constructeurs (__init__).
Voici un exemple simple :
class Calculator:
def __init__(self, *numbers):
self.numbers = numbers
def sum(self):
return sum(self.numbers)
def avg(self):
return sum(self.numbers)/len(self.numbers)
if __name__ == '__main__':
c = Calculator(1,2,3,4,5)
print(c.sum())
print(c.avg())
C'est une classe de calculatrice complètement inutile, mais ne nous en inquiétons pas trop. Le constructeur de cette classe utilise l'expression en étoile pour remplir la fonction de réception d'un nombre quelconque d'arguments de position. Que dois-je faire si je veux construire cette classe à partir d'une séquence (Liste ou Tuple) ?
En fait, utilisez simplement l'expression étoile :
Nous pouvons facilement utiliser classmethod pour implémenter des remplacements de constructeurs. La raison principale est que le premier paramètre de classmethod reçoit un objet de classe, ce qui nous permet de traiter les arguments transmis par classmethod dans les constructeurs standard. Reçoit l'entrée et crée des objets à l'aide de la classe. objets et les renvoie.
Si cette question est confiée à la méthode d'instance, il y aura une méthode de conversion supplémentaire utilisant type(self). L'utilisation de la méthode statique nécessite de coder en dur le nom de la classe dans la méthode, ce qui n'est pas si approprié :
L'exemple auquel je peux penser est que les méthodes de classe sont souvent utilisées en remplacement des constructeurs (
__init__
).Voici un exemple simple :
C'est une classe de calculatrice complètement inutile, mais ne nous en inquiétons pas trop. Le constructeur de cette classe utilise l'expression en étoile pour remplir la fonction de réception d'un nombre quelconque d'arguments de position. Que dois-je faire si je veux construire cette classe à partir d'une séquence (Liste ou Tuple) ?
En fait, utilisez simplement l'expression étoile :
Mais la méthode de classe est une autre option en ce moment :
Nous pouvons facilement utiliser classmethod pour implémenter des remplacements de constructeurs. La raison principale est que le premier paramètre de classmethod reçoit un objet de classe, ce qui nous permet de traiter les arguments transmis par classmethod dans les constructeurs standard. Reçoit l'entrée et crée des objets à l'aide de la classe. objets et les renvoie.
Si cette question est confiée à la méthode d'instance, il y aura une méthode de conversion supplémentaire utilisant
.type(self)
. L'utilisation de la méthode statique nécessite de coder en dur le nom de la classe dans la méthode, ce qui n'est pas si approprié :Si vous souhaitez en savoir plus sur la méthode d'instance, la méthode de classe et la méthode statique, vous pouvez vous référer à :
Dans quelles circonstances la méthode statique de Python doit-elle être utilisée ?
Le guide définitif sur la façon d'utiliser les méthodes statiques, de classe ou abstraites en Python
Questions auxquelles j'ai répondu : Python-QA
Attendez une minute et écrivez un exemple~
python3
类方法
et静态方法
peuvent accéder au类
de类变量
, mais pas à实例变量
.静态变量
, il semble que闭包
ne peut être réalisé que via静态变量
en python.