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.
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!