鱼C论坛

 找回密码
 立即注册
查看: 2177|回复: 18

[已解决]如何让类里的参数保留更改结果

[复制链接]
发表于 2023-5-2 21:49:56 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
代码如下:
class Member:
    card_nums = []
    user_names = []
    pass_words = []
    points = {}
    login_dates = []
    counts = 0
class Manage:
    def card_create(self):
       m = Member()
        card_num = 10000 + m.counts
        m.card_nums.append(card_num)
        user_name = input("请输入用户名:")
        m.user_names.append(user_name)
        pass_word = input("请输入密码:")
        while len(pass_word) < 6:
            pass_word = input("会员密码不能小于6位,请重新输入:")
        else:
            m.pass_words.append(pass_word)
       m.counts += 1
        print(f"创建成功,卡号为{card_num},关联用户->{user_name}")
        print(m.counts)
在每次重新是用 card_create方法时,counts都会自动更新为0,但是其他的列表和字典仍然保留上一次添加的结果,搞得我很无奈呀
下面是运行结果:
欢迎使用鱼c超市会员管理系统
1.创建新卡;2,修改密码;3.商品支付;4.积分查询;5.退出程序:1
请输入用户名:小甲鱼
请输入密码:123456
创建成功,卡号为10000,关联用户->小甲鱼
1.创建新卡;2,修改密码;3.商品支付;4.积分查询;5.退出程序:1
请输入用户名:小王八
请输入密码:111111
创建成功,卡号为10000,关联用户->小王八
1.创建新卡;2,修改密码;3.商品支付;4.积分查询;5.退出程序:
可以看到两次的卡号均为10000,后续进行其他操作的时候就会干扰
最佳答案
2023-5-2 21:51:54


问题出在  counts  是一个类属性,而不是实例属性。这意味着  counts  只有一个副本存在于所有  Member  实例之间,每次创建新实例时都会重置为0。解决方法是将  counts  改为实例属性,可以通过将  counts  放在  __init__  方法中实现:
class Member:
    def __init__(self):
        self.card_nums = []
        self.user_names = []
        self.pass_words = []
        self.points = {}
        self.login_dates = []
        self.counts = 0

class Manage:
    def card_create(self):
        m = Member()
        card_num = 10000 + m.counts
        m.card_nums.append(card_num)
        user_name = input("请输入用户名:")
        m.user_names.append(user_name)
        pass_word = input("请输入密码:")
        while len(pass_word) < 6:
            pass_word = input("会员密码不能小于6位,请重新输入:")
        else:
            m.pass_words.append(pass_word)
        m.counts += 1
        print(f"创建成功,卡号为{card_num},关联用户->{user_name}")
        print(m.counts)

现在,每个新实例都有自己的  counts  属性,因此每次调用  card_create  方法时,都会递增实例的  counts  属性。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-2 21:51:54 | 显示全部楼层    本楼为最佳答案   


问题出在  counts  是一个类属性,而不是实例属性。这意味着  counts  只有一个副本存在于所有  Member  实例之间,每次创建新实例时都会重置为0。解决方法是将  counts  改为实例属性,可以通过将  counts  放在  __init__  方法中实现:
class Member:
    def __init__(self):
        self.card_nums = []
        self.user_names = []
        self.pass_words = []
        self.points = {}
        self.login_dates = []
        self.counts = 0

class Manage:
    def card_create(self):
        m = Member()
        card_num = 10000 + m.counts
        m.card_nums.append(card_num)
        user_name = input("请输入用户名:")
        m.user_names.append(user_name)
        pass_word = input("请输入密码:")
        while len(pass_word) < 6:
            pass_word = input("会员密码不能小于6位,请重新输入:")
        else:
            m.pass_words.append(pass_word)
        m.counts += 1
        print(f"创建成功,卡号为{card_num},关联用户->{user_name}")
        print(m.counts)

现在,每个新实例都有自己的  counts  属性,因此每次调用  card_create  方法时,都会递增实例的  counts  属性。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-2 21:53:05 | 显示全部楼层
根据代码,每次调用card_create方法时都重新实例化了一个新的Member对象,并从头开始填充列表和字典,这也导致counts从0开始计数。因此,我们需要将Member类中的共享变量(列表和字典)放入__init__方法中,并将counts绑定到当前对象上,以便在后续调用中保持其状态。以下是改进后的代码:
class Member:
    def __init__(self):
        self.card_nums = []
        self.user_names = []
        self.pass_words = []
        self.points = {}
        self.login_dates = []
        self.counts = 0
        
class Manage:
    def card_create(self):
        m = Member()
        card_num = 10000 + m.counts
        m.card_nums.append(card_num)
        user_name = input("请输入用户名:")
        m.user_names.append(user_name)
        pass_word = input("请输入密码:")
        while len(pass_word) < 6:
            pass_word = input("会员密码不能小于6位,请重新输入:")
        else:
            m.pass_words.append(pass_word)
        m.counts += 1
        print(f"创建成功,卡号为{card_num},关联用户->{user_name}")
        print(m.counts)
在上面的修改后代码中,我们在Member类的__init__方法中初始化了五个共享变量,并将counts绑定到当前对象m上。然后,在card_create方法中使用m来访问和修改Member对象的属性,而不是直接使用类名。这意味着我们将始终使用同一个Member对象,并跟踪每次调用card_create方法时的新连续计数
有用请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-2 21:53:45 | 显示全部楼层
wcwc
!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-5-2 21:56:14 | 显示全部楼层

你们回答的太快了,我还以为只有一个答案就给了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-2 21:58:09 | 显示全部楼层
爱睡懒觉 发表于 2023-5-2 21:56
你们回答的太快了,我还以为只有一个答案就给了

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-2 21:59:12 | 显示全部楼层
isdkz 发表于 2023-5-2 21:51
问题出在  counts  是一个类属性,而不是实例属性。这意味着  counts  只有一个副本存在于所有  Member ...

isdkz 你让我2个最佳让我得到乐于助人呗

点评

。。。  发表于 2023-5-2 22:01
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-2 22:01:22 | 显示全部楼层
sfqxx 发表于 2023-5-2 21:59
isdkz 你让我2个最佳让我得到乐于助人呗

好,那我下一个不跟你争,但是你争不争得过陶远航就不知道了

他搞了个脚本检测有没有新问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-2 22:07:03 | 显示全部楼层
isdkz 发表于 2023-5-2 22:01
好,那我下一个不跟你争,但是你争不争得过陶远航就不知道了

他搞了个脚本检测有没有新问题

那我呢!你们把我忘了
(大哭不止)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-2 22:08:01 | 显示全部楼层
歌者文明清理员 发表于 2023-5-2 22:07
那我呢!你们把我忘了
(大哭不止)


看不出你有脚本,你的回复速度好像没有那么快吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-2 22:08:58 | 显示全部楼层
isdkz 发表于 2023-5-2 22:08
看不出你有脚本,你的回复速度好像没有那么快吧

我之前写了个chat.aidutu.cn的脚本,把那个网站搞的的用微信了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2023-5-2 22:09:32 | 显示全部楼层
isdkz 发表于 2023-5-2 22:08
看不出你有脚本,你的回复速度好像没有那么快吧

我是说你们的最佳,我…

真的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-2 22:09:47 | 显示全部楼层
歌者文明清理员 发表于 2023-5-2 22:08
我之前写了个chat.aidutu.cn的脚本,把那个网站搞的的用微信了

这种脚本能干啥
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-2 22:10:24 | 显示全部楼层
歌者文明清理员 发表于 2023-5-2 22:09
我是说你们的最佳,我…

真的

好吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-2 22:11:22 | 显示全部楼层
isdkz 发表于 2023-5-2 22:09
这种脚本能干啥

就是输入文本然后自动获取chatgpt的信息,并且用简易的转换器(只有code)
突然不能用了,我把headless去掉,一看发现是居然要登陆。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-2 22:12:22 | 显示全部楼层

啊哈哈哈哈哈,就凭我还想跟你们抢最佳(
feng了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-2 22:14:33 | 显示全部楼层
isdkz 发表于 2023-5-2 22:01
好,那我下一个不跟你争,但是你争不争得过陶远航就不知道了

他搞了个脚本检测有没有新问题

我也用脚本
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-2 22:32:57 | 显示全部楼层

好吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 02:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表