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

Python类方法参数与类属性同名问题及Tribute类扩展任务咨询

解答:扩展Tribute类 + 方法参数与类属性同名疑问

嘿,咱们一步步来搞定你的Python类作业,还有那个方法参数和类属性同名的疑问~

一、完成Tribute类的扩展实现

先直接给你满足所有要求的代码实现,再逐点解释:

class Tribute:
    def __init__(self):
        # 新增hunger属性,初始值设为0(初始饱腹状态)
        self.hunger = 0
    
    def get_hunger(self):
        # 返回当前的饥饿值
        return self.hunger
    
    def add_hunger(self, hunger):
        # 将传入的饥饿值累加到实例的hunger属性中
        self.hunger += hunger

对应你的三个任务点:

  • 任务a:在__init__初始化方法里,给每个Tribute实例都设置了self.hunger = 0,完美符合初始饱腹的要求;
  • 任务b:get_hunger()方法直接返回实例当前的hunger属性值,实现了获取饥饿值的功能;
  • 任务c:add_hunger(hunger)方法通过self.hunger += hunger把传入的饥饿值累加进去,逻辑清晰直接。

二、关于Python类方法参数与类属性同名的疑问

这绝对是新手刚接触类时最容易踩的坑之一,我给你讲明白:

当方法的参数名和实例的属性名重名时,Python会优先识别方法内部的局部参数,而不是实例的属性。举个错误的例子你就懂了:

class Tribute:
    def __init__(self):
        self.hunger = 0
    
    def wrong_add_hunger(self, hunger):
        # 这里的hunger是方法的局部参数,不是实例的self.hunger!
        hunger += 5
        print(f"局部参数hunger现在是: {hunger}")
        print(f"实例的hunger属性还是: {self.hunger}")

t = Tribute()
t.wrong_add_hunger(3)
# 输出结果:
# 局部参数hunger现在是: 8
# 实例的hunger属性还是: 0

看到没?这里修改的只是方法里的局部参数,完全碰不到实例的hunger属性——因为它们是两个独立的变量,只是名字一样罢了。

所以区分它们的核心规则就是:

  • 如果你要操作实例的属性,必须加上self.前缀(比如self.hunger);
  • 如果你要使用方法的局部参数,直接写参数名就行(比如hunger)。

回到咱们作业里的add_hunger方法,self.hunger += hunger这句话里,左边的self.hunger是实例的属性,右边的hunger是传入的参数,Python能准确区分两者,完全不会混淆。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:22:40