Python先批量输入再统一输出实现及类方法调用报错解决
问题解答
1. 实现先批量输入再统一输出
要实现先完成所有输入再统一输出,核心思路是先把所有输入的数据存储起来,等输入全部完成后再遍历存储的数据进行输出。你可以用一个列表来保存每次输入的用户信息(比如用字典存储每个用户的name和age),循环只负责收集数据,循环结束后再打印所有内容。
修改后的代码如下:
# 创建空列表用于存储所有输入的数据 user_list = [] # 循环收集输入 for x in range(2): name = input('name : ') age = input('age : ') # 将当前用户的信息以字典形式加入列表 user_list.append({'name': name, 'age': age}) print() # 空行分隔输入 # 统一输出所有收集到的数据 print("===== 所有输入信息 =====") for user in user_list: print('name', user['name']) print('age', user['age']) print('---------------')
这样运行时会先完成2次输入,输入结束后一次性打印所有用户的信息。
2. 修复类中的方法调用错误
你遇到的NameError: name 'self' is not defined错误,是因为直接通过类调用实例方法时,没有传入类的实例对象,而且你的类设计也有可以优化的地方:
self是类的实例方法中代表当前实例的参数,只有创建类的实例后,调用实例方法时Python才会自动传入self;- 你的
__init__方法要求传入name和age,但looop方法是自己收集输入的,所以__init__不需要这些参数; - 不要用
list作为变量名,它是Python的内置类型,会覆盖内置功能,建议改成data_list这类有意义的名字。
修正后的类代码及调用方式如下:
class Dataa(): def __init__(self): # 初始化时创建空列表用于存储数据 self.data_list = [] def loop(self): # 循环收集输入 for x in range(2): name = input('name : ') age = input('age : ') self.data_list.append({'name': name, 'age': age}) print() # 统一输出数据 print("===== 所有输入信息 =====") for user in self.data_list: print('name', user['name']) print('age', user['age']) print('---------------') # 正确调用方式:先创建类的实例,再调用实例的方法 data_handler = Dataa() data_handler.loop()
解释一下:
- 先创建
Dataa类的实例data_handler; - 调用实例的
loop方法,此时Python会自动把data_handler作为self参数传入方法中,不会再出现self未定义的错误; - 把存储数据的列表作为实例属性
self.data_list,这样类的其他方法也可以访问这些数据(如果后续需要扩展功能的话)。
内容的提问来源于stack exchange,提问作者campanella
相关产品推荐
相关产品推荐

