Maison > Article > développement back-end > Pour les débutants, comment comprendre @classmethod et @staticmethod
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.
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('-')) 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!