Pregunta

Cuando tengo métodos regulares para llamar otro método en una clase, tengo que hacer esto

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

pero cuando tengo los métodos estáticos no puedo escribir

self.dosomethingelse()

porque no hay ninguna instancia. ¿Cómo tengo que hacer en Python para llamar a un método estático de otro método estático de la misma clase?

Edit: lo que es un lío. Ok, editado de nuevo la pregunta a la pregunta original. Ya tengo la respuesta a la segunda pregunta que está en el comentario de Peter Hansen. Si usted piensa que debería abrir otra pregunta para una respuesta que ya tengo, PLZ dime.

¿Fue útil?

Solución

class.method debería funcionar.

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

  @staticmethod
  def some_static_method():
    pass

SomeClass.some_class_method()
SomeClass.some_static_method()

Otros consejos

  

¿Qué tengo que hacer en Python para llamar a un método estático de otro método estático de la misma clase?

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 la cuestión ha cambiado un poco. La respuesta a la pregunta de cómo se llama a un método de instancia de un método estático es que no se puede sin pasar a una instancia como un argumento o una instancia de esa instancia en el interior del método estático.

Lo que sigue es sobre todo para responder a "¿cómo se llama a un método estático de otro método estático":

Tenga en cuenta que hay es una diferencia entre los métodos estáticos y métodos de clase en Python. Un método estático no tiene en primer argumento implícito, mientras que un método de la clase toma la clase como primer argumento implícito (por lo general cls por convención). Con esto en mente, he aquí cómo usted haría lo siguiente:

Si se trata de un método estático:

test.dosomethingelse()

Si se trata de un método de clase:

cls.dosomethingelse()

Aceptar la principal diferencia entre los métodos de clases y métodos estáticos es:

  • método de clase tiene su propia identidad, es por eso que tienen que ser llamado desde dentro de una instancia.
  • en el método estático otra parte puede ser compartida entre varias instancias de modo que debe ser llamado desde dentro de la clase

usted no puede llamar a los métodos no estáticos de los métodos estáticos, sino mediante la creación de una instancia dentro del método estático .... que debería funcionar de esa manera

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

esperanza de que le ayudará a:)

Si no dependen de la clase o instancia a continuación, ¿por qué no hacer de ellos una función? Ya que esto podría parecer la solución obvia. A menos que, por supuesto, usted piensa que va a tener que ser sobrescritos, etc. subclase Si es así, las respuestas anteriores son la mejor apuesta. Los dedos cruzados que no conseguirá rebajado por el solo hecho ofreciendo una solución alternativa que puede o no puede adaptarse a las necesidades de repique;).

A medida que la respuesta correcta dependerá del caso de uso del código en cuestión;) Disfrute

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top