Heim >Backend-Entwicklung >Python-Tutorial >Was ist der Unterschied zwischen den Dekoratoren @staticmethod und @classmethod?

Was ist der Unterschied zwischen den Dekoratoren @staticmethod und @classmethod?

anonymity
anonymityOriginal
2019-05-24 14:58:206526Durchsuche

Der Unterschied zwischen den Dekoratoren @staticmethod und @classmethod ist: @staticmethod benötigt keine self- und cls-Parameter, und @classmethod benötigt keine self-Parameter, aber cls-Parameter.

Was ist der Unterschied zwischen den Dekoratoren @staticmethod und @classmethod?

Wenn wir eine Methode einer Klasse verwenden, müssen wir im Allgemeinen zuerst die Klasse instanziieren und dann die instanziierte Klasse verwenden, um ihre Methode aufzurufen

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()

Wenn Sie @staticmethod oder @classmethod verwenden, können Sie es direkt mit class name.method name () ohne Instanziierung aufrufen.

Dies ist hilfreich, um den Code zu organisieren, bestimmte Funktionen, die zu einer bestimmten Klasse gehören sollten, in diese Klasse einzufügen und auch dabei zu helfen, den Namespace aufgeräumt zu halten.

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()

Der Unterschied zwischen @staticmethod oder @classmethod

Eine gewöhnliche Methode einer Klasse, ein Parameter erfordert den Selbstparameter, um sich selbst darzustellen.

@staticmethod muss nicht das Selbst seines eigenen Objekts und den cls-Parameter seiner eigenen Klasse darstellen, genau wie bei der Verwendung einer Funktion.

@classmethod erfordert keinen self-Parameter, aber der erste Parameter muss der cls-Parameter sein, der seine eigene Klasse darstellt.

Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen den Dekoratoren @staticmethod und @classmethod?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn