Python实例变量操作疑问:调用addorder后打印新实例orders为空
问题原因
你犯了新手常见的错误——创建了两个完全独立的Customer对象:
- 第一行代码
Customer('308','John').addorder((1,2,3,4))确实创建了一个Customer实例并添加了订单,但这个实例没有被赋值给任何变量,执行完后就被Python回收了。 - 第二行
print(Customer('308','John'))是重新创建了一个全新的Customer实例,这个新实例的orders列表是__init__方法初始化的空列表,所以打印结果是[]。
修正方案
把创建的实例保存到变量中,确保后续操作的是同一个对象:
class Customer(object): def __init__(self, number, name): self.name = name self.number = number self.orders = [] def addorder(self, order): self.orders.extend(order) return self.orders def __str__(self): return str(self.orders) # 将实例赋值给变量john john = Customer('308','John') john.addorder((1,2,3,4)) # 打印同一个实例 print(john)
运行这段代码就能输出你期望的[1,2,3,4]。
如果只是想快速看到结果,也可以直接打印addorder的返回值(该方法返回更新后的orders列表),但这种方式无法保留实例供后续操作:
print(Customer('308','John').addorder((1,2,3,4)))
内容的提问来源于stack exchange,提问作者Sean Kim
相关产品推荐
相关产品推荐

