Je ne suis pas d'accord avec les autres et je dis oui. Pour ma part, j'ai eu plus de succès en plaçant chaque classe dans son propre fichier (module). Mais il y a des exceptions alors laissez-moi vous expliquer avec un exemple.
Si vous avez une classe Foo, puis le mettre dans un fichier appelé Foo.py, avec les sections suivantes:
- Imports
- C'est là que vous tirez dans les dépendances.
- Exemples:
import math
, from Bar import *
- Globals
- C'est là que vous définissez l'interface externe à votre module, qui sont tous les symboles qui sont visibles à l'extérieur de ce module.
- Exemple:
__all__ = ['Foo']
- C'est également ici que vous pouvez définir des variables globales (mauvaises) et des constantes globales (bonnes). Ces globals n'ont pas besoin d'être exportés; ils peuvent être rendus globaux simplement pour simplifier le code.
- Exemple:
PI = 3.14159
signifie que vous pouvez écrire PI
, alors que si vous l'avez défini dans la classe Foo, vous devrez écrire Foo.PI
.
- Fonctions
- C'est là que vous définissez toutes les fonctions de haut niveau qui sont pertinentes à la classe Foo, mais ne fait pas partie de l'espace de noms de classe Foo. Ceux-ci sont probablement rares puisque les classes autorisent à la fois
@staticmethods
et les classes internes.
- Exemple:
def print_foo(foo): print(foo)
- Classes
- Exemple:
class Foo(object): pass
Parfois, vous voulez placer plus d'une classe dans le même module. Vous devriez le faire chaque fois que deux classes ou plus sont conceptuellement liées au point où vous les utiliseriez presque toujours ensemble et jamais de façon indépendante. C'est l'exception, pas la norme. Dans ce cas, ajoutez tous les noms de classe au __all__
global. Enfin, pour chaque module Foo.py, il devrait y avoir un module de test unitaire correspondant appelé testFoo.py.
En venant de Java j'ai eu cette même question, mon garçon était confus pendant un moment. :-) – snarkyname77
Fait intéressant, PyDev vous donne la possibilité de faire exactement cela. – Uri
Si vous importez une classe à partir d'un fichier avec plusieurs classes, l'interpréteur n'exécuterait-il pas toutes les classes de ce fichier? –