Статические методы - Как вызвать метод из другого метода?

Когда у меня есть обычные методы для вызова другого метода в классе, я должен сделать это

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

но когда у меня есть статические методы, я не могу написать

self.dosomethingelse()

потому что нет экземпляра. Как мне сделать в Python для вызова статического метода из другого статического метода того же класса?

Изменить: что за беспорядок. Хорошо, я редактировал вопрос на исходный вопрос. У меня уже есть ответ на второй вопрос, который в комментарии Питера Хансена. Если вы думаете, что я должен открыть другой вопрос для ответа, который у меня уже есть, plz скажите мне.

Ответ 1

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()

Ответ 2

Как мне сделать в 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()

Ответ 3

ПРИМЕЧАНИЕ. Похоже, что вопрос изменился. Ответ на вопрос о том, как вы вызываете метод экземпляра из статического метода, состоит в том, что вы не можете не передавать экземпляр в качестве аргумента или создавать экземпляр этого экземпляра внутри статического метода.

Далее следует ответить "как вы вызываете статический метод из другого статического метода":

Имейте в виду, что существует разница между статическими методами и методами класса в Python. Статический метод не принимает неявный первый аргумент, в то время как метод класса принимает класс как неявный первый аргумент (обычно cls по соглашению). Имея это в виду, вот как вы это сделаете:

Если это статический метод:

test.dosomethingelse()

Если это метод класса:

cls.dosomethingelse()

Ответ 4

ОК, главное различие между методами класса и статическими:

  • Метод класса имеет свою собственную идентичность, поэтому они должны вызываться изнутри.
  • с другой стороны, статический метод может совместно использоваться несколькими экземплярами, поэтому его необходимо вызывать из THE CLASS

Ответ 5

Вы не можете использовать нестатические методы из статических методов, но создав экземпляр внутри статического метода.... он должен работать таким образом

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()

надеюсь, что вам помогут:)

Ответ 6

Если они не зависят от класса или экземпляра, то почему бы просто не сделать их функцией? Как это казалось бы очевидным решением. Если, конечно, вы не думаете, что его нужно перезаписать, подкласс и т.д. Если это так, то лучшие ответы будут отвечать на предыдущие ответы. Пальцы, пересеченные, я не буду отмечать, просто предлагая альтернативное решение, которое может или не может соответствовать нуждам некоторых людей;).

Поскольку правильный ответ будет зависеть от варианта использования рассматриваемого кода;) Наслаждайтесь