我刚发现当我执行以下操作时
import pygame.joystick
我不仅可以访问
手柄
,还可以访问显示器
,例如我可以执行以下操作:pygame.display.init()
就像我简单地导入pygame
一样。
有什么区别吗?
我刚发现当我执行以下操作时
import pygame.joystick
手柄
,还可以访问显示器
,例如我可以执行以下操作:pygame.display.init()
就像我简单地导入pygame
一样。
有什么区别吗?
pygame.joystick
会触发额外的导入;无论是 pygame
包本身,还是 pygame.joystick
或这两个模块导入的任何 pygame.*
模块,都可能在某处导入 pygame.display
。
因此,现在能够引用 pygame.display
的事实是实现细节的偶然事件。将来版本中您可能不能这样做(例如,如果该项目不再需要导入 pygame.display
来加载 pygame.joystick
)。导入时,模块顶层内部代码将被执行,并将该模块添加到sys.modules
中,可供使用。基于源文件的内容,任何可能被执行。
在您的情况下,pygame/__init__.py
或pygame/joystick.py
中包含以下内容:
import pygame.display
#include <joystick.h>
pygame.display
是一个传递导入的依赖项。你不能指望每个包都会这样发生。最好显式地导入你的依赖项。 - Martijn Pieterspygame/__init__.py
中,或者pygame.joystick
有那个导入,或者这两个中的任何一个导入了最终导入pygame.display
的某些东西。这是一个实现细节。 - Martijn Pieters