131 votes

Méthodes statiques - Comment appeler une méthode à partir d'une autre méthode ?

Lorsque j'ai des méthodes régulières pour appeler une autre méthode dans une classe, je dois le faire

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

mais quand j'ai des méthodes statiques je ne peux pas écrire

self.dosomethingelse()

parce qu'il n'y a pas d'instance. Que dois-je faire en Python pour appeler une méthode statique à partir d'une autre méthode statique de la même classe ?

179voto

warvariuc Points 11787

Comment dois-je faire en Python pour appeler une méthode statique à partir d'une autre méthode statique de la même 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()

98voto

jldupont Points 31331

class.method devrait fonctionner.

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

  @staticmethod
  def some_static_method():
    pass

SomeClass.some_class_method()
SomeClass.some_static_method()

3voto

Ahmad Dwaik Points 405

OK la principale différence entre les méthodes de classe et les méthodes statiques est :

  • class method a sa propre identité, c'est pourquoi ils doivent être appelés à partir d'une INSTANCE.
  • d'autre part, le procédé statique peut être partagé entre de multiples instances de sorte qu'il doit être appelé à partir de LA CLASSE

2voto

iosDevSi Points 1278

Si celles-ci ne dépendent pas de la classe ou de l'instance, il suffit de les rendre fonctionnelles.

Comme cela semblerait être la solution évidente. À moins, bien sûr, que vous pensiez qu'il va falloir l'écraser, le sous-classer, etc. Si oui, alors les réponses précédentes sont le meilleur pari. Doigts croisés Je ne vais pas être marqué pour simplement offrir une solution alternative qui peut ou non répondre aux besoins de quelqu'un ;).

Comme la bonne réponse dépendra du cas d'utilisation du code en question ;)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X