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.display
est 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.display
dans 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.joystick
a 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.