如何将变量添加至列表?Python添加Person实例至列表报错求助
问题分析与修复方案
先把你代码里的问题逐一列出来:
- Input类里创建实例时写了
NewPerson,但你定义的类是Person,这是拼写错误,会直接报错。 - List类的
data_to_list方法里,self.surnam = surnam是拼写错误,应该是self.surname = surname。 - 你用
list.extend()的方式完全错误:extend接受的是一个可迭代对象(比如列表),而且它是原地修改列表,返回值是None,所以你把list = list.extend(...)赋值后,list会变成None。 - List类的设计逻辑有问题:应该在类内部维护一个存储Person实例的列表,而不是每次调用方法都新建空列表,而且没必要把Person的属性拆分后再添加,直接把整个Person实例加进去更合理。
- 你看到的
<__main__.List object at 0x0000027FD63B6B60>,是因为你直接打印了List类的实例,而这个类没有定义__str__方法,Python会默认输出对象的内存地址。
下面是修正后的完整代码:
class Person: def __init__(self, name, surname, age, phone_number): self.name = name self.surname = surname self.age = age self.phone_number = phone_number def __str__(self): return f"\n{self.name}\t{self.surname}\t{self.age}\t{self.phone_number}" class Input: def input_data(self): name = input("\nInsert a name: \n") surname = input("Insert a surname: \n") age = int(input("Insert an age: \n")) phone_number = input("Insert a phone number: \n") # 修正拼写错误,用正确的Person类创建实例 person = Person(name, surname, age, phone_number) return person class PersonList: # 改名避免和内置list冲突 def __init__(self): # 内部维护一个存储Person实例的列表 self.people = [] def add_person(self, person): # 直接添加整个Person实例 self.people.append(person) def __str__(self): # 定义打印方法,返回所有Person的字符串拼接 return "".join(str(p) for p in self.people) # 测试代码 if __name__ == "__main__": input_handler = Input() person_list = PersonList() # 获取输入并添加到列表 new_person = input_handler.input_data() person_list.add_person(new_person) # 打印列表内容 print(person_list)
关键修改说明:
- 把
List类改名为PersonList,避免和Python内置的list类重名,减少混淆。 - 在
PersonList的__init__里初始化self.people = [],用来存储所有Person实例。 - 新增
add_person方法,直接接收Person实例并通过append添加到内部列表(append用于添加单个元素,extend用于添加可迭代对象的所有元素,这里用append更合适)。 - 给
PersonList添加__str__方法,这样直接打印实例时会输出所有Person的信息,而不是内存地址。 - 修正Input类里的
NewPerson为Person,并且去掉了不必要的实例属性存储,直接用局部变量接收输入更简洁。
现在运行测试代码,输入信息后就能正确打印出添加的Person内容,不会再出现内存地址的输出了。
内容的提问来源于stack exchange,提问作者NikaFZ6
相关产品推荐
相关产品推荐

