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

Python Trader类方法问题:number属性未正确增减求助

trader类实例属性未更新的问题分析与修复

问题描述

尝试创建一个名为trader的类,包含实例属性price、action(初始为空列表)和number(初始值为0)。需在类中定义takeAction方法:当price小于50时,向action列表添加'BUY'且number加1;当price大于90时,添加'SELL'且number减1;否则添加'HOLD'且number保持不变。但执行代码后,实例t1=trader(30)的t1.number输出仍为0,未按预期递增,求错误原因指导。

原代码:

class trader:
    action=[]
    number=0

    def __init__ (self,price):
        self.price=price
        
    def takeAction(self):
        if self.price<50:
            action.append('BUY')
            number+=1

        elif self.price>90:
            action.append('SELL')
            number = number-1

        else:
            action.append('HOLD')
            number
        return action

实例调用:

t1=trader(30)
t1.number

输出:0

错误原因

  1. 类属性与实例属性混淆:你把action和number定义为类属性,所有trader实例会共享这两个值,而非每个实例独立拥有。但需求是每个实例有自己的action列表和number计数,必须在__init__方法中定义为实例属性(用self.前缀)。
  2. 未通过self.访问实例属性:在takeAction方法里,直接写action和number会被当作局部变量或类属性,无法修改当前实例的属性。必须用self.action和self.number来操作实例自己的属性。
  3. 未执行takeAction方法:创建实例后直接访问t1.number,但takeAction方法从未被调用,属性自然不会更新。

修复后的代码

class Trader:  # 遵循Python类名大驼峰命名规范
    def __init__(self, price):
        self.price = price
        self.action = []  # 每个实例独立的空列表
        self.number = 0   # 每个实例独立的初始计数
        
    def takeAction(self):
        if self.price < 50:
            self.action.append('BUY')
            self.number += 1
        elif self.price > 90:
            self.action.append('SELL')
            self.number -= 1
        else:
            self.action.append('HOLD')
        return self.action

正确调用示例

t1 = Trader(30)
t1.takeAction()  # 必须调用方法触发逻辑
print(t1.number)  # 输出:1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 07:06:06