私はPythonで静的メソッドがどのように機能するかを理解するために、この短いテスト/サンプルコードを開発しました。Pythonで@staticmethodのポイントは何ですか?
class TestClass:
def __init__(self, size):
self.size = size
def instance(self):
print("regular instance method - with 'self'")
@staticmethod
def static():
print("static instance method - with @staticmethod")
def static_class():
print("static class method")
a = TestClass(1000)
a.instance()
a.static()
TestClass.static_class()
このコードは正しく動作し、エラーは返されません。私の質問は次のとおりです:
"このメソッドはインスタンスから呼び出される"のように理解できると私は正しく理解していますか?
また、@staticmethodの背後にあるロジックは何ですか?インスタンスから呼び出すことのできる静的メソッドを作成するのはどうですか?それは正確にではないどのような静的メソッドについてですか?
第3のアプローチよりも第2のアプローチが好ましい理由は何ですか? (私はデコレータが存在するので、これにポイントがあると仮定します).3番目のオプションは、よりシンプルで簡単です。
これは2.xでは全く機能しません。また、 'a.static_class()'はどちらでも動作しません。 – jonrsharpe
テストケースに '' TestClass.static() ''と '' a.static_class() ''を追加し、何が起こるかを観察します。これは '' @ staticmethod''がなぜ有用なのかを説明するのに役立ちます。 –
* "静的メソッドの正確なものではないのですか?" * - インスタンス上で呼び出せるという利点は、 'cls.whatever()'と 'self.whatever()'が正しく動作することです。クラスとインスタンスのメソッドからクラス名を保持し、継承を正しく処理することができます。 – jonrsharpe