定義できますか?静的メソッドクラスインスタンスで直接呼び出すことができるものはありますか? 例:
MyClass.the_static_method()
ベストアンサー1
はい、staticmethod
デコレータ:
class MyClass(object):
@staticmethod
def the_static_method(x):
print(x)
MyClass.the_static_method(2) # outputs 2
一部のコードでは、デコレータではなく関数として使用して静的メソッドを定義する古い方法を使用する可能性があることに注意してくださいstaticmethod
。これは、Python の古いバージョン (2.2 および 2.3) をサポートする必要がある場合にのみ使用してください。
class MyClass(object):
def the_static_method(x):
print(x)
the_static_method = staticmethod(the_static_method)
MyClass.the_static_method(2) # outputs 2
これは最初の例 ( を使用@staticmethod
) と完全に同一ですが、便利なデコレータ構文を使用していません。
最後に、staticmethod
控えめに!Python で静的メソッドが必要な状況は非常に少なく、別の「トップレベル」関数の方がわかりやすい場合に静的メソッドが使用されるのを何度も見てきました。
静的メソッドは暗黙的な最初の引数を受け取りません。静的メソッドを宣言するには、次の慣用句を使用します。
class C: @staticmethod def f(arg1, arg2, ...): ...
@staticmethod形式は関数であるデコレータ– 関数定義の説明については、関数定義詳細については。
これは、クラス ( など
C.f()
) またはインスタンス ( などC().f()
) のいずれかで呼び出すことができます。インスタンスは、そのクラスを除いて無視されます。Pythonの静的メソッドはJavaやC++の静的メソッドと似ています。より高度な概念については、
classmethod()
。静的メソッドの詳細については、標準型階層のドキュメントを参照してください。標準型階層。
バージョン 2.2 の新機能。
バージョン 2.4 で変更: 関数デコレータ構文が追加されました。