Maison  >  Article  >  développement back-end  >  Pour les débutants, comment comprendre @classmethod et @staticmethod

Pour les débutants, comment comprendre @classmethod et @staticmethod

anonymity
anonymityoriginal
2019-05-27 11:09:313017parcourir

staticmethod est équivalent à une fonction définie dans une classe, donc si une méthode n'est ni liée à une instance ni à une classe spécifique, il est recommandé de la définir comme une méthode statique. Cela rend non seulement le code clair. coup d'œil, mais facilite également la maintenance du code.

Le paramètre transmis implicitement à la méthode d'appel de la sous-classe est la classe correspondant à l'objet, et la variable de classe de la classe correspondante est générée dynamiquement pendant le processus d'appel.

Pour les débutants, comment comprendre @classmethod et @staticmethod

Comprenez que les classes classicmethod et staticmethod sont une structure de données qui peut créer des objets. Lorsqu'une classe est appelée, un objet instance de la classe est créé. Une fois l'objet créé, Python vérifie si la méthode init() est implémentée. Si init() a été implémenté, alors il sera appelé, en passant l'objet instance comme premier paramètre (self).

Par exemple, définissez une classe Date qui stocke les informations de date, et la fonction d'initialisation est redéfinie ici.

class Date(object):
 
    day = 0
    month = 0
    year = 0
 
    def __init__(self, day=0, month=0, year=0):
        self.day = day
        self.month = month
        self.year = year
    def tellDate(self):
        print 'Today is %s-%s-%s'%(self.day,self.month,self.year)

Si nous devons appeler la méthode tell Date, nous devons d'abord créer une instance, ou utiliser Date().tellDate()

date1 = Date()
date1.tellDate()

Comment appeler la fonction directement en utilisant le nom de la classe ?

Vous pouvez utiliser @classmethod ou @staticmethod pour appeler le nom de la classe. Le nom de la méthode () appelle la fonction

Supposons maintenant que nous devons créer de nombreuses instances de date et que les informations de date sont transmises. entrant de l'extérieur sous la forme d'une chaîne, le format est 'jj-mm-aaaa'. Ce qu'il faut faire

Analyser la chaîne d'informations de date dans un tuple contenant trois variables : année, mois et jour

Lors de l'instanciation d'un objet Date, transmettre l'année, le mois et le jour comme ; paramètres .

Comme ceci :

day, month, year = map(int, string_date.split('-'))
date1 = Date(day, month, year)

Python ne peut pas être surchargé comme C++, nous introduisons donc la méthode class, qui ne nécessite pas de paramètre self, mais nécessite que le premier paramètre soit cls représentant sa propre classe paramètre.

@classmethod
    def from_string(cls, date_as_string):
        day, month, year = map(int, date_as_string.split('-'))
        date1 = cls(day, month, year)
        return date1

Vous pouvez utiliser directement le nom de la classe. Nom de la méthode ()

Les avantages d'une programmation comme celle-ci sont :

L'opération de décomposition de chaîne peut être réutilisée, et nous seulement. doit passer Parameter une fois ;

OOP

cos est la classe elle-même, pas une instance de la classe. Lorsque nous utilisons Date comme classe parent, ses sous-classes auront également la from_string. méthode

La méthode statique est très similaire à la méthode de classe, mais elle ne nécessite pas d'auto-représentation de son propre objet et des paramètres cls de sa propre classe, tout comme l'utilisation d'une fonction.

@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

Tous les programmes et résultats en cours d'exécution

class Date(object):
    day = 0
    month = 0
    year = 0
 
    def __init__(self, day=0, month=0, year=0):
        self.day = day
        self.month = month
        self.year = year
        
    def tellDate(self):
        print 'Today is %s-%s-%s'%(self.day,self.month,self.year)
    @classmethod
    def from_string(cls, date_as_string):
        day, month, year = map(int, date_as_string.split('-'))
        date = cls(day, month, year)
        return date
 
    @staticmethod
    def is_date_valid(date_as_string):
        day, month, year = map(int, date_as_string.split(&#39;-&#39;))
        return day <= 31 and month <= 12 and year <= 3999
 
if __name__ == '__main__':
    date1 = Date()
    date1.tellDate()
    date2 = Date.from_string("14-04-2016")
    date2.tellDate()
    print Date.is_date_valid("14-04-2016")

Les résultats en cours d'exécution sont :

Today is 0-0-0
Today is 14-4-2016
True

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!

Déclaration:
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