Implémentation de déclarations forward pour des fonctions en Python

Est-il possible de déclarer des fonctions et de les implémenter séparément en python? Je veux dire quelque chose comme dans C:

void foo(); void foo() { } 

Les déclarations C sont utilisées pour contourner les problèmes de dépendance. La fonction foo est utilisée par la bar fonctions, et foo besoin d’une bar pour exister avant de pouvoir la déclarer:

 void bar() { if (condition) { foo(); } } void foo() { if (condition) { bar(); } } 

ne comstackra pas car foo n’a pas encore été déclaré; void foo(); C est l’orthographe car je sais ce que je fais, compilateur, accepte que foo existera plus tard .

Il n’existe pas de tels problèmes de dépendance en Python, les noms globaux étant recherchés au moment de l’exécution; ils ne doivent pas encore exister au moment de la compilation.

En d’autres termes, cela fonctionne simplement :

 def bar(): if condition: foo() def foo(): if condition: bar() 

parce que bar et foo sont résolus au moment de l’exécution.

Si votre script est autonome, vous pouvez utiliser __name__=='__main__' pour contourner votre problème avec la déclaration de __name__=='__main__' savoir plus .

Notez que ce n’est pas vraiment une réponse à votre question mais un moyen de contourner le problème. Considérez le script suivant comme exemple.

 def main(): bar() def bar(): print "Hello World" if __name__=="__main__": main() # can be any function not necessarily "main" 

Je ne connais pas C À en juger par les commentaires que vous avez déjà obtenus, vous semblez vouloir résoudre un problème qui n’existe pas en Python.

La chose la plus proche à laquelle je puisse penser pour ce que vous demandez est la suivante:

 def foo(): pass 

Ceci est parfois utilisé à des fins de test lors de l’agencement d’une classe, par exemple, et vous souhaitez que celle-ci fonctionne correctement même si vous n’avez pas encore écrit le code pour une fonction particulière.

Cependant, il y a un autre usage. Si vous essayez de créer le modèle de méthode template, les fonctions de rappel déclarées dans la classe de base pourraient prendre la forme suivante:

 def callback(): pass 

Ces méthodes pourraient ensuite être implémentées dans des sous-classes ( éventuellement ), par opposition aux méthodes abstraites, qui doivent être implémentées.