为何未直接导入pygame的.py文件可调用其模块方法?
解答:为什么Scoreboard类文件无需导入pygame
先明确你的代码场景:
你的Scoreboard类文件代码
from constants import * #constants is another additional file, containing some variables class Scoreboard: def __init__(self, m_display): self.display = m_display self.width = DIS_WIDTH self.height = DIS_HEIGHT def message(self, msg, color): mesg = MAIN_FONT_STYLE.render(msg, True, color) self.display.blit(mesg, [self.width / 6, self.height / 3]) def your_score(self, score): value = SCORE_FONT_STYLE.render("Your Score: " + str(score), True, YELLOW) self.display.blit(value, [0, 0])
你的constants.py代码
import pygame pygame.init() MAIN_FONT_STYLE = pygame.font.SysFont(None, 25) SCORE_FONT_STYLE = pygame.font.SysFont(None, 35)
核心原因:你调用的都是已有对象的方法,而非直接调用pygame模块API
.render方法:MAIN_FONT_STYLE和SCORE_FONT_STYLE是在constants.py里已经创建好的pygame.font.Font实例,你通过from constants import *把这些实例导入到类文件后,直接调用实例自带的.render方法即可,不需要再导入pygame模块。.blit方法:self.display是主文件里用pygame.display.set_mode()创建的pygame.Surface实例,这个实例本身就内置了.blit方法。当你把这个实例作为参数传入Scoreboard类时,它带着自己的所有方法,不需要在类文件里导入pygame来调用这个方法。
PyCharm提示冗余的逻辑
PyCharm会检测当前文件中是否直接使用了导入的模块名(比如写pygame.xxx这样的代码)。你的类文件里没有任何地方直接写pygame.开头的代码,所有用到的pygame相关功能都是通过传入的实例或从constants导入的实例来实现的,所以导入pygame完全是多余的,IDE会提示你删除。
简单总结:Python的对象是“自带技能包”的,只要拿到了已经初始化好的对象,就可以直接用它的方法,不需要在当前文件再导入它所属的模块。
内容的提问来源于stack exchange,提问作者Vladimir
相关产品推荐
相关产品推荐

