You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Python中Marathon类register方法访问构造函数字典报错求助

解决NameError:访问类实例字典的正确方式

你遇到的问题核心在于:__init__方法里定义的my_marathon局部变量,它的作用范围只限于__init__方法内部,类的其他方法(比如register)根本"看不到"它。要让跨方法都能访问这个字典,必须把它定义成实例属性——也就是给它加上self.前缀。

另外还要提醒你一个小错误:你写的{'runner', 'time'}是集合(set)的语法,不是字典(dict)。字典的格式是{键: 值},如果要存储多个跑步者和他们的完赛时间,初始应该用空字典{}来定义。

修正后的完整代码示例

class Marathon:
    def __init__(self):
        """Set up this marathon without any runners."""
        # 用self.将字典声明为实例属性,初始化为空
        self.my_marathon = {}

    def register(self, runner_name, finish_time):
        """注册跑步者及其完赛时间"""
        # 通过self.访问实例属性my_marathon,添加键值对
        self.my_marathon[runner_name] = finish_time

# 测试功能
my_event = Marathon()
my_event.register("Alice", 125)
my_event.register("Bob", 142)
print(my_event.my_marathon)  # 输出: {'Alice': 125, 'Bob': 142}

关键逻辑说明

  • self是类实例的指代,在类的所有方法中,只要用self.xxx定义的属性,就能被同一个实例的其他方法访问、修改。
  • 字典的初始化:如果一开始没有预设的跑步者数据,用{}创建空字典是最合理的,后续通过register方法动态添加键值对即可。

内容的提问来源于stack exchange,提问作者miCruQue

火山引擎 最新活动