ホームページ  >  記事  >  バックエンド開発  >  Pythonの静的メソッドとクラスメソッドの違いに基づく

Pythonの静的メソッドとクラスメソッドの違いに基づく

不言
不言オリジナル
2018-06-02 15:34:222002ブラウズ

この記事では、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()


Difference

• foo() の呼び出し元はクラス A のインスタンスであり、class_foo() の呼び出し元である必要があります。 static_foo() はクラスでもインスタンスでも構いません

• 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 &#39;__main__.A&#39;>,1)

A.class_foo(1)
# executing class_foo(<class &#39;__main__.A&#39;>,1)

-----------------------------------------------------------------

a.static_foo(1)
# executing static_foo(1)

A.static_foo(&#39;hi&#39;)
# executing static_foo(hi)

Function

• 使用シナリオ: classmethod は一部のファクトリ クラスでよく使用されます。つまり、OOP で継承するときに使用されます。一般に、静的メソッドは外部関数に置き換えることができますが、継承時に変更することはできず、C++/JAVA の静的メソッドに非常によく似ています

• コードの整理に役立ち、同時に名前空間のクリーンさにも役立ちます

以上がPythonの静的メソッドとクラスメソッドの違いに基づくの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。