Maison > développement back-end > Tutoriel Python > Quelle est la différence entre « @classmethod » et « @staticmethod » en Python ?

Quelle est la différence entre « @classmethod » et « @staticmethod » en Python ?

Barbara Streisand
Libérer: 2024-12-22 10:16:46
original
293 Les gens l'ont consulté

What's the Difference Between `@classmethod` and `@staticmethod` in Python?

Signification et utilisation de @classmethod et @staticmethod pour les débutants

En Python, @classmethod et @staticmethod sont des décorateurs utilisés pour définir des méthodes avec spécifique caractéristiques.

@classmethod

Une méthode de classe est une méthode qui est liée à une classe, et non à une instance individuelle de la classe. Il doit avoir une classe comme premier argument, généralement nommée cls. Par convention, les méthodes de classe sont nommées avec les préfixes from_ ou create_.

Quand utiliser @classmethod :

  • Lorsque vous souhaitez créer une méthode d'usine qui renvoie un nouvelle instance de la classe.
  • Lorsque vous souhaitez définir une méthode qui opère sur la classe elle-même, plutôt que sur un exemple.

Exemple :

class Date:
    def __init__(self, day, month, year):
        self.day = day
        self.month = month
        self.year = year

    @classmethod
    def from_string(cls, date_as_string):
        day, month, year = map(int, date_as_string.split('-'))
        return cls(day, month, year)
Copier après la connexion

@staticmethod

Une méthode statique est une méthode qui n'est pas lié soit à la classe, soit à une instance. Il n’a accès à aucune variable d’instance ou de classe. Les méthodes statiques sont généralement utilisées pour des fonctions utilitaires qui peuvent être réutilisées sans modification.

Quand utiliser @staticmethod :

  • Lorsque vous souhaitez définir une fonction qui exécute une opération mais ne dépend pas de l'état de la classe ou de l'instance.
  • Lorsque vous souhaitez créer une fonction qui peut être appelée depuis n'importe quel contexte.

Exemple :

class Date:
    @staticmethod
    def is_date_valid(date_as_string):
        day, month, year = map(int, date_as_string.split('-'))
        return day <= 31 and month <= 12 and year <= 3999
Copier après la connexion

Différence entre @classmethod et @staticmethod

Feature @classmethod @staticmethod
Access to class Has access to the class No access to the class
Access to instance No access to instances No access to instances
Usage Factory methods, operations on the class Utility functions, independent of class or instances

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal