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

anonymity
Libérer: 2019-06-05 14:24:37
original
3018 Les gens l'ont consulté

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)
Copier après la connexion

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()
Copier après la connexion

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)
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion

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")
Copier après la connexion

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

Today is 0-0-0
Today is 14-4-2016
True
Copier après la connexion

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!

Étiquettes associées:
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal