129

クラス内の別のメソッドを呼び出すための通常のメソッドがある場合、これを行う必要があります

class test:
    def __init__(self):
        pass
    def dosomething(self):
        print "do something"
        self.dosomethingelse()
    def dosomethingelse(self):
        print "do something else"

しかし、静的メソッドがあるときは書くことができません

self.dosomethingelse()

実例がないからです。同じクラスの別の静的メソッドから静的メソッドを呼び出すには、Python で何をする必要がありますか?

4

6 に答える 6

176

同じクラスの別の静的メソッドから静的メソッドを呼び出すには、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()
于 2010-11-05T08:08:06.637 に答える
96

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()
于 2009-12-07T13:26:39.653 に答える
12

注 - 質問が一部変更されたようです。静的メソッドからインスタンス メソッドを呼び出す方法に関する質問への答えは、インスタンスを引数として渡すか、静的メソッド内でそのインスタンスをインスタンス化しないとできないということです。

以下は主に「別の静的メソッドから静的メソッドを呼び出す方法」への回答です。

Python の静的メソッドとクラス メソッドには違いあることに注意してください。静的メソッドは暗黙的な最初の引数を取りませんが、クラス メソッドはクラスを暗黙的な最初の引数として取ります (通常clsは慣例によります)。それを念頭に置いて、これを行う方法は次のとおりです。

静的メソッドの場合:

test.dosomethingelse()

クラスメソッドの場合:

cls.dosomethingelse()
于 2009-12-07T13:25:49.673 に答える
3

クラスメソッドと静的メソッドの主な違いは次のとおりです。

  • クラス メソッドには独自の ID があるため、INSTANCE 内から呼び出す必要があります。
  • 一方、静的メソッドは複数のインスタンス間で共有できるため、THE CLASS 内から呼び出す必要があります。
于 2009-12-07T15:13:55.180 に答える
0

静的メソッドから非静的メソッドを呼び出すことはできませんが、静的メソッド内にインスタンスを作成することによって行います。

それはそのように動作するはずです

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 instance
        a = test2()
        a.dosomethingelse()

    def dosomethingelse(self):
        print "do something else"

test2.dosomething()
于 2009-12-07T14:48:05.327 に答える