1. ホーム
  2. python

[解決済み] Pythonの静的メソッド?

2022-03-17 18:53:22

質問

Pythonで、クラスを初期化せずに呼び出せる静的メソッドを持つことは可能でしょうか?

ClassName.static_method()

解決方法は?

そうだ。 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, ...): ...

静的メソッド形式は、関数 デコレーター - の関数定義の説明を参照してください。 関数定義 をご覧ください。

このメソッドは、クラス(たとえば C.f() ) またはインスタンス (例えば C().f() ). インスタンスは、そのクラス以外は無視されます。

Pythonの静的メソッドは、JavaやC++にあるものと似ています。より高度な概念については classmethod() .

静的メソッドの詳細については、標準的な型階層に関するドキュメントである 標準的な型階層 .

バージョン2.2での新機能です。

バージョン 2.4 で変更: 関数デコレータの構文を追加しました。