静的メソッド - 別のメソッドからメソッドを呼び出すにはどうすればよいですか?
-
13-09-2019 - |
質問
クラス内の別のメソッドを呼び出すための通常のメソッドがある場合、これを行う必要があります
class test:
def __init__(self):
pass
def dosomething(self):
print "do something"
self.dosomethingelse()
def dosomethingelse(self):
print "do something else"
しかし、静的メソッドがある場合は書けません
self.dosomethingelse()
実例がないからです。Python で同じクラスの別の静的メソッドから静的メソッドを呼び出すにはどうすればよいですか?
編集:なんて混乱だ。OK、質問を編集して元の質問に戻しました。Peter Hansen のコメントにある 2 番目の質問に対する答えはすでに持っています。私がすでに持っている答えに対して別の質問をする必要があると思われる場合は、教えてください。
解決
class.method
は動作するはずです。
class SomeClass:
@classmethod
def some_class_method(cls):
pass
@staticmethod
def some_static_method():
pass
SomeClass.some_class_method()
SomeClass.some_static_method()
他のヒント
どのように私は同じクラスの別の静的メソッドから静的メソッドを呼び出すためのPythonで実行する必要がありますか?
class Test() :
@staticmethod
def static_method_to_call()
pass
@staticmethod
def another_static_method() :
Test.static_method_to_call()
@classmethod
def another_class_method(cls) :
cls.static_method_to_call()
NOTE - 質問がいくつか変更されているように見えます。あなたは、静的メソッドからインスタンスメソッドを呼び出す方法の質問への答えは、あなたが引数としてインスタンスを渡すか、静的メソッド内でそのインスタンスをインスタンス化せずにできないことです。
以下は、「どのようにあなたが別の静的メソッドから静的メソッドを呼ぶのです」答えるために、ほとんどです
ベア心の中でが存在していることの静的メソッドとPythonでクラスメソッドの間の差です。クラスメソッド(通常は慣例によりcls
)暗黙の最初の引数としてクラスを取りながら、静的メソッドは、暗黙の最初の引数を取りません。このことを念頭に置いて、ここにあなたがそれを行うだろう方法は次のとおりです。
それは、静的メソッドだ場合:
test.dosomethingelse()
これはクラスメソッドだ場合:
cls.dosomethingelse()
クラス メソッドと静的メソッドの主な違いは次のとおりです。
- クラス メソッドには独自の ID があるため、インスタンス内から呼び出す必要があります。
- 一方、静的メソッドは複数のインスタンス間で共有できるため、THE CLASS 内から呼び出す必要があります。
あなたは、静的メソッドから非静的メソッドを呼び出すことが、静的メソッド内でインスタンスを作成することによって、カント.... それはそのように動作するはずです。
class test2(object):
def __init__(self):
pass
@staticmethod
def dosomething():
print "do something"
#creating an instance to be able to call dosomethingelse(),or you may use any existing instace
a=test2()
a.dosomethingelse()
def dosomethingelse(self):
print "do something else"
test2.dosomething()
あなたを助けることを願っています:)
なぜちょうどそれら機能しませんか?このよう明白な解決策のように思われます。コースの場合を除き、あなたはそう、前の答えが最善の策であれば、サブクラスなどを上書きする必要があるだろうと思います。指が、私は単にまたは誰かのニーズに適合しない場合があり、代替ソリューションを提供するためにマークダウンを受ける習慣交差;)
正解として問題のコードのユースケースに依存します。)
お楽しみください