能否用变量引用Python类名?RPG文本游戏开发技术问询
问题描述
我正在开发一款文本RPG游戏,采用类与子类结构,导入了多个以RPG主类命名的Python文件,每个文件内包含对应子类的多个类。我希望从主文件中通过变量访问某类的类变量,例如访问吟游诗人的法术列表需使用Bard.Bard.SpellBook(第一个Bard为导入的模块,第二个为类名),尝试用变量实现但报错。
尝试代码:
x = Bard for item in x.x.SpellBook: print(item, ":", x.x.SpellBook[item])
预期输出法术名与等级,格式如spellname : spellevel,实际报错:
Traceback (most recent call last): File "main.py", line 82, in <module> for item in x.x.SpellBook: AttributeError: module 'ClassFold.Bard' has no attribute 'x'
请问如何通过变量正确引用类名来访问类变量?
解决方案
错误核心:你将模块Bard赋值给变量x后,试图用x.x访问类——但模块中不存在名为x的属性,因此触发AttributeError。以下是两种可行的解决方式:
方式1:直接绑定类到变量
如果明确目标类是模块中的Bard,直接将类本身赋值给变量,而非模块:
# 导入模块内的Bard类 from ClassFold.Bard import Bard x = Bard # 直接通过变量访问类变量SpellBook for item in x.SpellBook: print(f"{item} : {x.SpellBook[item]}")
方式2:动态从模块中获取类
如果需要根据字符串动态指定类名,使用getattr()函数从模块中提取对应类:
import ClassFold.Bard as bard_module target_class_name = "Bard" # 从模块中获取名为target_class_name的类 x = getattr(bard_module, target_class_name) for item in x.SpellBook: print(f"{item} : {x.SpellBook[item]}")
两种方式都能通过变量正确引用类,进而访问类变量SpellBook,输出符合预期的法术名与等级格式。
内容的提问来源于stack exchange,提问作者theoreticalJH
相关产品推荐
相关产品推荐

