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

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

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. Если Вы думаете, что я должен открыть другой вопрос для ответа, который я уже имею, скажите мне.

75
задан martineau 10 September 2019 в 23:13
поделиться

4 ответа

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()
69
ответ дан 24 November 2019 в 11:30
поделиться

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

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

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

1
ответ дан 24 November 2019 в 11:30
поделиться

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

  • метод класса имеет собственную идентичность, поэтому они должны быть вызывается из INSTANCE.
  • с другой стороны, статический метод может использоваться несколькими экземплярами, так что он должен вызываться из класса
5
ответ дан 24 November 2019 в 11:30
поделиться

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

Далее следует в основном ответ «как Вы вызываете статический метод из другого статического метода »:

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

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

test.dosomethingelse()

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

cls.dosomethingelse()
9
ответ дан 24 November 2019 в 11:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: