Python类间属性调用异常:多次触发输入请求的问题排查
问题原因分析
1. 场景实例被重复创建
Map类的next_scene方法存在核心问题:每次调用该方法时,都会重新构建包含所有场景的字典,并且为每个场景类创建全新的实例:
def next_scene(self, scene_name): scenes = { 'living': Living(), 'reception': Reception(), 'first': First(), 'second': Second(), 'third': Third(), 'death':Death() } return scenes.get(scene_name)
这意味着每次切换场景,所有场景(包括完全无关的)都会被重新实例化一遍,而不是复用已存在的实例。
2. Reception初始化会触发Living的输入逻辑
Reception类的构造方法中直接实例化了Living类:
class Reception(Room): def __init__(self): self.living=Living()
而Living的__init__方法包含4次用户输入请求(姓名、三个朋友名称)。因此,只要Reception被实例化,就会强制触发这4次输入。
3. 输入请求的叠加
结合上述两个问题,最终导致多次输入的叠加:
- 程序启动时调用
next_scene,会同时实例化Living(4次输入)和Reception(又实例化一次Living,再加4次输入),累计8次。 - 当从
Reception切换到First场景时,再次调用next_scene,又会重新实例化Living(4次输入),此时累计达到12次,正好对应你遇到的问题。
内容的提问来源于stack exchange,提问作者new2python
相关产品推荐
相关产品推荐

