この記事では、Python に基づいた staticmethod と classmethod の違いを主に紹介します。これは、必要な友達に参照してもらえるように共有します
上記。このクラスには 3 つの関数があり、次のように使用されます:
class A(object): def foo(self,x): print "executing foo(%s,%s)"%(self,x) @classmethod def class_foo(cls,x): print "executing class_foo(%s,%s)"%(cls,x) @staticmethod def static_foo(x): print "executing static_foo(%s)"%x a=A()
• foo() パラメータは self とその他のパラメータです。 class_foo() パラメータは static_foo() のみを使用します。パラメータがあり、self と class (cls) はありません。 )• a.foo(1) の foo() は a にバインドされ、class_foo() はクラスにバインドされ、static_foo() はどちらにもバインドされません。次のように print を使用して表示できます:
a.foo(1) # executing foo(<__main__.A object at 0xb7dbef0c>,1) ----------------------------------------------------------------- a.class_foo(1) # executing class_foo(<class '__main__.A'>,1) A.class_foo(1) # executing class_foo(<class '__main__.A'>,1) ----------------------------------------------------------------- a.static_foo(1) # executing static_foo(1) A.static_foo('hi') # executing static_foo(hi)Function • 使用シナリオ: classmethod は一部のファクトリ クラスでよく使用されます。つまり、OOP で継承するときに使用されます。一般に、静的メソッドは外部関数に置き換えることができますが、継承時に変更することはできず、C++/JAVA の静的メソッドに非常によく似ています
• コードの整理に役立ち、同時に名前空間のクリーンさにも役立ちます
以上がPythonの静的メソッドとクラスメソッドの違いに基づくの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。