クラス内の別のメソッドを呼び出すための通常のメソッドがある場合、これを行う必要があります
class test:
def __init__(self):
pass
def dosomething(self):
print "do something"
self.dosomethingelse()
def dosomethingelse(self):
print "do something else"
しかし、静的メソッドがある場合、私は書くことができません
self.dosomethingelse()
インスタンスがないためです。同じクラスの別の静的メソッドから静的メソッドを呼び出すには、Pythonで何をしなければなりませんか?
編集:なんて混乱。質問を編集して元の質問に戻しました。 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()
注-質問が一部変更されたようです。静的メソッドからインスタンスメソッドを呼び出す方法の質問に対する答えは、インスタンスを引数として渡すか、静的メソッド内でそのインスタンスをインスタンス化せずにできないということです。
以下は、主に「別の静的メソッドから静的メソッドを呼び出す方法」に答えることです。
is Pythonの静的メソッドとクラスメソッドの違いがあることに注意してください。静的メソッドは暗黙の最初の引数を取りませんが、クラスメソッドは暗黙の最初の引数としてクラスを取ります(通常、慣例によりcls
)。それを念頭に置いて、次のようにします。
静的メソッドの場合:
test.dosomethingelse()
クラスメソッドの場合:
cls.dosomethingelse()
クラスメソッドと静的メソッドの主な違いは次のとおりです。
静的メソッドから非静的メソッドを呼び出すことはできませんが、静的メソッド内にインスタンスを作成することで...
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()
それがあなたを助けることを願っています:)
これらがクラスやインスタンスに依存しない場合、なぜそれらを関数にしないのですか?これは明らかな解決策のように思えます。もちろん、サブクラスなどを上書きする必要があると思わない限り、そうであれば、前の答えが最善策です。指が交差した私は、誰かのニーズに合うかもしれないし、そうでないかもしれない代替ソリューションを提供するためだけにマークダウンされません。
正解は問題のコードのユースケースに依存するため、;)