Pergunta

Quando eu tenho métodos regulares para chamar outro método em uma classe, eu tenho que fazer isso

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

mas quando tenho métodos estáticos não posso escrever

self.dosomethingelse()

porque não existe nenhuma instância. Como é que eu tenho que fazer em Python para chamar um método estático de outro método estático da mesma classe?

Editar: o que é uma bagunça. Ok, eu editado de volta a pergunta à pergunta inicial. Eu já tenho a resposta para a segunda pergunta que está no comentário de Peter Hansen. Se você acha que eu deveria abrir outra pergunta para uma resposta eu já tenho, plz me dizer.

Foi útil?

Solução

class.method deve funcionar.

class SomeClass:
  @classmethod
  def some_class_method(cls):
    pass

  @staticmethod
  def some_static_method():
    pass

SomeClass.some_class_method()
SomeClass.some_static_method()

Outras dicas

Como é que eu tenho que fazer em Python para chamar um método estático de outro método estático da mesma classe?

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

NOTA - parece que a questão mudou alguma. A resposta à questão de como você chamar um método de instância de um método estático é que você não pode, sem passar uma instância como um argumento ou instanciar essa instância dentro do método estático.

O que se segue é principalmente a resposta "Como você chama um método estático de outro método estático":

Tenha em mente que há é a diferença entre métodos estáticos e métodos de classe em Python. Um método estático não tem em primeiro argumento implícito, enquanto uma classe método leva a classe como o primeiro argumento implícito (geralmente cls por convenção). Com isso em mente, aqui está como você faria isso:

Se é um método estático:

test.dosomethingelse()

Se é um método de classe:

cls.dosomethingelse()

OK a principal diferença entre os métodos de classe e métodos estáticos é:

  • método de classe tem sua própria identidade, é por isso que eles têm que ser chamado a partir de uma instância.
  • no método outra estática mão pode ser compartilhada entre várias instâncias para que ele deve ser chamado de dentro da classe

você não pode chamar métodos não-estáticos a partir de métodos estáticos, mas por criar uma instância dentro do método estático .... ele deve funcionar assim

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

esperança de que irá ajudá-lo:)

Se estes não dependem da classe ou instância, em seguida, por que não apenas torná-los uma função? Como isso iria parecer a solução óbvia. A menos é claro que você acha que vai precisar de ser substituído, subclasse etc. Se sim, então as respostas anteriores são a melhor aposta. Dedos cruzados Eu não vou ficar marcado para baixo para apenas oferecendo uma solução alternativa que pode ou não se encaixam someones necessidades;).

Como a resposta correta vai depender do caso de uso do código em questão;) Desfrute

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top