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