|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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,后续进行其他操作的时候就会干扰
问题出在 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 属性。
|
|