|  | 
 
| 
代码如下:
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  属性。
 | 
 |