Comme l'ont souligné d'autres, la deuxième print
est exécutée car elle fait partie de la suite d'instructions formant la déclaration de la classe - toutes sont exécutées lorsque le module dans lequel elles se trouvent est importé
car la déclaration fait partie de son code de niveau supérieur, contrairement à une fonction ou méthode imbriquée.
La première instruction print
n'est pas exécutée car elle fait partie de la définition d'une méthode, dont les instructions ne s'exécutent pas tant qu'elle n'est pas appelée - contrairement à celles à l'intérieur d'une définition de classe. Typiquement, la méthode __init__()
d'une classe est appelée indirectement lorsqu'une instance de la classe est créée en utilisant le nom de la classe, qui serait d()
pour une nommée d
comme la vôtre.
Ainsi, bien que cela contredise ce qui est dans le texte des chaînes affichées, pour que cette deuxième instruction print
ne s'exécute que lors de la création d'instances de la classe (tout comme la première), vous devriez également la rendre partie de la même méthode (ou appelée par celle-ci). En d'autres termes, après avoir fait cela, aucune des deux ne s'exécutera lorsque le fichier contenant la classe est importé
, mais les deux le feront lorsque des instances de la classe seront créées. Voici ce que je veux dire:
Fichier x.py
:
class d:
def __init__(self):
print 'print this will NOT be printed' # not true
print "this will be printed when object is created"
Fichier b.py
:
import x # aucune instruction print n'est exécutée
obj = d() # les deux instructions print seront exécutées maintenant