使用类开发网络时addUser函数报'str'无getUserName属性如何解决
报错原因排查与修复方案
你遇到的'str' object has no attribute 'getUserName'报错,核心原因是代码中对字符串类型错误调用了仅User类实例才有的getUserName()方法,具体问题如下:
- 变量命名冲突+逻辑错位:addUser方法的入参名和类成员属性
self.users重名,调用addUser时你传入的是字符串类型的新用户名,代码中误对这个字符串入参调用getUserName(),直接触发报错。 - 校验逻辑完全写反:原本要实现的「遍历已存用户列表、校验新用户名是否重复」的逻辑,被写成了遍历入参、和入参本身的返回值比对,完全达不到校验效果。
- 用户实例创建逻辑缺失:新增用户时仅传入了user_id,没有把新用户名存入User实例,后续就算添加成功也无法正常获取用户名做校验。
修正后代码
# 修改方法入参为明确的新用户名参数new_username def addUser(self, new_username): """ Adds a user to be included in the users list by the append method """ # 遍历类本身存储的已存在用户列表self.users做重复校验 for exist_user in self.users: if new_username == exist_user.getUserName(): print("Sorry, that name is taken. Try again.") return # 创建User实例时同步传入id和用户名,需保证User类构造函数支持接收用户名参数 user_id = len(self.users) self.users.append(User(user_id, new_username))
如果你的User类原来的构造函数没有接收用户名的逻辑,同步修改__init__方法存储用户名属性即可。
内容的提问来源于stack exchange,提问作者Victoria Sanchez-Apellaniz
相关产品推荐
相关产品推荐

