Maison > Article > développement back-end > Quelle est la différence entre les décorateurs @staticmethod et @classmethod
La différence entre les décorateurs @staticmethod et @classmethod est la suivante : @staticmethod ne nécessite pas de paramètres self et cls, et @classmethod ne nécessite pas de paramètres self, mais nécessite des paramètres cls.
De manière générale, lorsque l'on utilise une méthode d'une classe, il faut d'abord instancier la classe, puis utiliser la classe instanciée pour appeler sa méthode
class Test(object): """docstring for Test""" def __init__(self, arg=None): super(Test, self).__init__() self.arg = arg def say_hi(self): print 'hello wrold' def main(): test = Test() //1. 首先实例化test类 test.say_hi() //2. 再调用类的方法 if __name__ == '__main__': main()
Lorsque vous utilisez @staticmethod ou @classmethod, vous pouvez l'appeler directement avec class name.method name () sans instanciation.
Ceci est utile pour organiser le code, placer certaines fonctions qui devraient appartenir à une certaine classe dans cette classe et également aider à garder l'espace de noms bien rangé.
class Test(object): """docstring for Test""" def __init__(self, arg=None): super(Test, self).__init__() self.arg = arg def say_hi(self): print 'hello wrold' @staticmethod def say_bad(): print 'say bad' @classmethod def say_good(cls): print 'say good' def main(): test = Test() test.say_hi() Test.say_bad() //直接类名.方法名()来调用 Test.say_good() //直接类名.方法名()来调用 if __name__ == '__main__': main()
La différence entre @staticmethod ou @classmethod
Une méthode ordinaire d'une classe, un paramètre nécessite le paramètre self pour se représenter.
@staticmethod n'a pas besoin de représenter le soi de son propre objet et le paramètre cls de sa propre classe, tout comme l'utilisation d'une fonction.
@classmethod ne nécessite pas le paramètre self, mais le premier paramètre doit être le paramètre cls représentant sa propre classe.
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!