You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否用变量引用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 16:56:04