Maison > développement back-end > Tutoriel Python > 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
Libérer: 2020-09-17 16:40:08
original
6537 Les gens l'ont consulté

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

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

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!

É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