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
错误原因
- 类属性与实例属性混淆:你把
action和number定义为类属性,所有trader实例会共享这两个值,而非每个实例独立拥有。但需求是每个实例有自己的action列表和number计数,必须在__init__方法中定义为实例属性(用self.前缀)。 - 未通过
self.访问实例属性:在takeAction方法里,直接写action和number会被当作局部变量或类属性,无法修改当前实例的属性。必须用self.action和self.number来操作实例自己的属性。 - 未执行
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
相关产品推荐
相关产品推荐

