Maison  >  Article  >  développement back-end  >  Quelle est la différence entre les décorateurs @staticmethod et @classmethod

Quelle est la différence entre les décorateurs @staticmethod et @classmethod

anonymity
anonymityoriginal
2019-05-24 14:58:206470parcourir

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.

Quelle est la différence entre les décorateurs @staticmethod et @classmethod

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!

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