Python中@staticmethodと@classmethodの違いと使用例コードを詳しく説明してください。


本論文では、Pythonにおけるクラスの装飾器@staticmethodと@classimethodの使用例コードとその違いを紹介します。
1、@staticmethodと@classimethodの違い
@staticmethod:静的方法
@classmethod:種類の方法
一般的には、ある種類の方法を使うには、まずオブジェクトを具体化してから呼び出す方法が必要です。
@staticmethodまたは@classimethodを使うと、実例化を必要とせず、直接にクラス名で呼び出すことができます。
使用:直接クラス名.メソッド名()を呼び出します。staticmethodと@classimethodは直接類名できます。メソッド名()を呼び出します。
@staticmethodは、自身のオブジェクトのselfと自身のクラスのclsパラメータを表示する必要はなく、使用関数と同じです。
使用:直接クラス名.属性名または直接クラス名.メソッド名。
@classimethodもselfパラメータは必要ありませんが、最初のパラメータは自分のクラスを表すclsパラメータが必要です。
使用:直接クラス名.属性名または直接クラス名.メソッド名。
両者が定義する装飾器の呼び出し方法は同じですが、@classimethod装飾器が定義するクラス方法は、クラスパラメータclsに入る必要があります。
@staticmethodでは、このクラスのいくつかの属性方法を呼び出すには、直接クラス名.属性名またはクラス名.メソッド名のみが必要です。
また、@classimethodにはclsパラメータがあり、クラスの属性、クラスの方法、オブジェクトの実例などを呼び出して、ハードコードをより柔軟にすることができます。
2、@staticmethodと@classmethodはコード例を使用します。

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()
#        ,    a           。
a.foo (1)
# executing foo(<__main__.A object at 0xb7dbef0c>,1)
#     ,                      self
a.class_foo(1)
# executing class_foo(<class '__main__.A'>,1)
#       class_foo
A.class_foo(1)
# executing class_foo(<class '__main__.A'>,1)
#  staticmethods,self(    ) cls( )              。           ,               
a.static_foo(1)
# executing static_foo(1)
A.static_foo('hi')
# executing static_foo(hi)
print(a.foo)
# <bound method A.foo of <__main__.A object at 0xb7d52f0c>>
print(a.class_foo)
# <bound method type.class_foo of <class '__main__.A'>>
print(a.static_foo)
# <function static_foo at 0xb7d479cc>
print(a.static_foo)
# <function static_foo at 0xb7d479cc>
 
お互いの呼び出しの違いをまとめます。

ここで、Python@staticmethodと@classmethodの違いと使用例コードについての文章を紹介します。Python@staticmethodと@classmethodの内容については、以前の文章を検索してください。