如何让类里的参数保留更改结果
代码如下: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,后续进行其他操作的时候就会干扰
问题出在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属性。 根据代码,每次调用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方法时的新连续计数
有用请设置最佳答案 wcwc
!! sfqxx 发表于 2023-5-2 21:53
wcwc
!!
你们回答的太快了,我还以为只有一个答案就给了{:5_110:} 爱睡懒觉 发表于 2023-5-2 21:56
你们回答的太快了,我还以为只有一个答案就给了
{:5_96:} isdkz 发表于 2023-5-2 21:51
问题出在counts是一个类属性,而不是实例属性。这意味着counts只有一个副本存在于所有Member ...
isdkz 你让我2个最佳让我得到乐于助人呗{:5_100:} sfqxx 发表于 2023-5-2 21:59
isdkz 你让我2个最佳让我得到乐于助人呗
好,那我下一个不跟你争,但是你争不争得过陶远航就不知道了
他搞了个脚本检测有没有新问题{:10_256:} isdkz 发表于 2023-5-2 22:01
好,那我下一个不跟你争,但是你争不争得过陶远航就不知道了
他搞了个脚本检测有没有新问题
那我呢!你们把我忘了
(大哭不止) 歌者文明清理员 发表于 2023-5-2 22:07
那我呢!你们把我忘了
(大哭不止)
看不出你有脚本,你的回复速度好像没有那么快吧{:10_269:} isdkz 发表于 2023-5-2 22:08
看不出你有脚本,你的回复速度好像没有那么快吧
我之前写了个chat.aidutu.cn的脚本,把那个网站搞的的用微信了{:10_266:} isdkz 发表于 2023-5-2 22:08
看不出你有脚本,你的回复速度好像没有那么快吧
我是说你们的最佳,我…
{:10_266:}
真的 歌者文明清理员 发表于 2023-5-2 22:08
我之前写了个chat.aidutu.cn的脚本,把那个网站搞的的用微信了
这种脚本能干啥 歌者文明清理员 发表于 2023-5-2 22:09
我是说你们的最佳,我…
真的
好吧{:10_282:} isdkz 发表于 2023-5-2 22:09
这种脚本能干啥
就是输入文本然后自动获取chatgpt的信息,并且用简易的转换器(只有code)
突然不能用了,我把headless去掉,一看发现是居然要登陆。。 isdkz 发表于 2023-5-2 22:10
好吧
啊哈哈哈哈哈,就凭我还想跟你们抢最佳(
feng了
) isdkz 发表于 2023-5-2 22:01
好,那我下一个不跟你争,但是你争不争得过陶远航就不知道了
他搞了个脚本检测有没有新问题
我也用脚本{:10_256:} sfqxx 发表于 2023-5-2 22:14
我也用脚本
好吧{:10_260:}
页:
[1]