Когда у меня есть обычные методы для вызова другого метода в классе, я должен сделать это
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. Если Вы думаете, что я должен открыть другой вопрос для ответа, который я уже имею, скажите мне.
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()
вы не можете вызывать нестатические методы из статических методов, но создавая экземпляр внутри статического метода .... он должен работать так
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()
надеюсь, что это поможет вам :)
ОК, основное различие между методами класса и статическими методами заключается в следующем:
ПРИМЕЧАНИЕ - похоже, вопрос немного изменился. Ответ на вопрос о том, как вы вызываете метод экземпляра из статического метода, заключается в том, что вы не можете без передачи экземпляра в качестве аргумента или создания экземпляра этого экземпляра внутри статического метода.
Далее следует в основном ответ «как Вы вызываете статический метод из другого статического метода »:
Имейте в виду, что есть разница между статическими методами и методами классов в Python. Статический метод не принимает неявный первый аргумент, в то время как метод класса принимает класс в качестве неявного первого аргумента (обычно cls
по соглашению). Имея это в виду, вот как вы это сделаете:
Если это статический метод:
test.dosomethingelse()
Если это метод класса:
cls.dosomethingelse()