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

创建以client id为键的类对象字典时遇值覆盖问题求助

问题原因

你反复复用了同一个client_new对象,两次调用enter_client_info()都是在修改这个对象的属性——字典里的两个键(1和2)其实指向的是同一个实例,所以不管取哪个键,拿到的都是最后输入的那组数据。

另外你的Client类代码还有两处小问题:

  • 缺少class Client:的类定义头,这会导致代码无法正常运行
  • id_iter作为全局变量不够合理,改成类属性能避免全局命名污染,还能让所有Client实例共享同一个ID迭代器
修正后的完整代码

第一步:修复Client类

import itertools

class Client:
    # 把ID迭代器设为类属性,所有实例共享,从1开始计数更符合常规习惯
    id_iter = itertools.count(start=1)

    def __init__(self):
        self.cl_id = 0
        self.surname = ""
        self.name = ""
        self.phone = ""
        self.address = ""
        self.email = ""
        self.afm = ""

    def enter_client_info(self):
        self.cl_id = next(self.id_iter)
        self.surname = input("Enter client surname: ")
        self.name = input("Enter client name: ")
        self.phone = input("Enter client phone: ")
        self.address = input("Enter client address: ")
        self.email = input("Enter client email: ")
        self.afm = input("Enter client afm: ")

第二步:正确创建多个客户端

# 建议把变量名改成client_dict,更贴合字典的语义
client_dict = {}

# 创建第一个客户端:生成新实例
new_client = Client()
new_client.enter_client_info()
client_dict[new_client.cl_id] = new_client

# 创建第二个客户端:必须重新生成新实例,不能复用之前的对象
new_client = Client()
new_client.enter_client_info()
client_dict[new_client.cl_id] = new_client

# 现在测试就能得到正确结果
print(client_dict[1].name)
print(client_dict[2].surname)
额外优化小技巧
  • 可以给enter_client_info添加返回值,简化创建和添加的代码:
def enter_client_info(self):
    self.cl_id = next(self.id_iter)
    self.surname = input("Enter client surname: ")
    self.name = input("Enter client name: ")
    self.phone = input("Enter client phone: ")
    self.address = input("Enter client address: ")
    self.email = input("Enter client email: ")
    self.afm = input("Enter client afm: ")
    return self  # 返回实例本身

# 简化后的添加逻辑
client_dict = {}
new_client = Client().enter_client_info()
client_dict[new_client.cl_id] = new_client

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 19:45:33