Python如何通过变量值动态获取constants模块内的对应常量值
解决方法
你需要用Python内置的动态属性获取功能替代硬编码的点语法访问,有两种常用实现方案:
方案1:使用getattr()(最推荐)
getattr()是Python官方提供的动态获取对象属性的方法,会自动将第二个参数的字符串值作为属性名查找,直接替换报错的代码行即可:
# 替换原来的 self.screen.fill(constants.self.w_colour) self.screen.fill(getattr(constants, self.w_colour))
可以补充异常处理逻辑避免传入不存在的颜色名导致程序崩溃:
try: target_color = getattr(constants, self.w_colour) except AttributeError: # 找不到对应颜色常量时抛出友好提示,或者指定默认 fallback 颜色 raise ValueError(f"不支持的颜色名称:{self.w_colour}") self.screen.fill(target_color)
如果不需要报错,直接指定默认颜色即可:
# 找不到对应颜色时默认用白色,避免程序终止 target_color = getattr(constants, self.w_colour, (255,255,255))
方案2:使用模块内置__dict__属性
所有Python模块的顶层属性都存储在模块的__dict__字典中,你可以直接用键值对方式访问:
self.screen.fill(constants.__dict__[self.w_colour])
该方案的缺点是没有默认值机制,传入不存在的键会直接抛出KeyError,灵活性低于getattr()。
更易维护的优化建议
你可以直接在constants模块中统一将颜色定义为字典,后续访问更直观,也方便批量管理颜色:
constants.py 示例写法
BLACK = (0,0,0) WHITE = (255,255,255) RED = (255,0,0) # 新增统一颜色映射字典 COLOR_MAP = { "BLACK": BLACK, "WHITE": WHITE, "RED": RED }
调用方式
self.screen.fill(constants.COLOR_MAP[self.w_colour])
内容的提问来源于stack exchange,提问作者J4ns323
相关产品推荐
相关产品推荐

