Je viens de découvrir que lorsque je fais
pygame.display.init()
je n'ai pas seulement accès au joystick , mais aussi à display , c'est-à-dire que je peut par exemple faire
import pygame.joystick
comme si j'avais simplement importé pygame.
Quelle est la différence? p >
3 Réponses :
Lors de l'importation, le code interne du module au niveau supérieur est exécuté, et le module est ajouté à sys.modules et mis à disposition. En fonction de ce qui se trouvait à l'intérieur du fichier source, tout peut et peut arriver.
Dans votre cas, l'un des éléments pygame / __ init__.py ou pygame / joystick.py contient :
import pygame.display
D'où la disponibilité du module que vous n'essayiez même pas d'importer.
Ce qui se passe, c'est que l'importation de pygame.joystick déclenche des importations supplémentaires; soit le package pygame lui-même, soit pygame.joystick , ou l'un des modules pygame. * que ces deux modules importent, arrive à importer pygame.display quelque part.
Le fait que vous puissiez maintenant référencer pygame.display est donc un accident de détails d'implémentation. Vous ne pourrez peut-être pas le faire dans les versions futures (si le projet n'a plus besoin d'importer pygame.display pour charger pygame.joystick , par exemple).
Il vaut mieux s'en tenir à une importation explicite dans votre propre projet.
Dans le code source du joystick, ils importent pygame.display ou pygame et le tri.
Dans la version C de la documentation:
Dans le fichier joystick.c ils ont joystick.h inclus
#include <joystick.h>
En effet,
pygame.displayest une dépendance importée de manière transitoire. Vous ne pouvez pas compter sur cela pour chaque colis. Mieux vaut importer vos dépendances explicitement.@MartijnPieters, cela signifie qu'il y a une instruction
import pygame.displaydans le code d'initialisation du package?consultez également la section importation de sous-modules de la documentation python pour le comportement général
@ A.Donda: oui, peut-être que dans
pygame / __ init__.py, oupygame.joysticka cette importation, ou l'un de ceux-ci importe quelque chose qui ensuite (éventuellement) importe < code> pygame.display . Un détail de mise en œuvre.