Python自定义Student类向列表append时报错及打印输出异常问题
问题原因解析
1. 初始参数报错原因
你最开始定义的__init__构造方法仅接收self这1个位置参数,实例化Student时传入了2个姓名参数,加上Python自动传入的self一共3个参数,和方法定义的参数数量不匹配,因此触发TypeError: __init__() takes 1 positional argument but 3 were given报错。你后续修改构造方法增加两个形参的操作是正确的,已经解决了这个问题。
2. 打印输出为内存地址的原因
Python中打印自定义类的实例时,默认输出格式为<类名 object at 内存地址>,这是类的默认__repr__方法返回的内容:
__str__方法:执行print(单个实例)时会调用该方法,返回自定义的可读字符串__repr__方法:打印列表/字典等容器内的实例时会调用该方法,一般建议返回和__str__一致的可读内容,或者返回可以直接重构该实例的代码格式
解决代码示例
你只需要在调整后的Student类中新增两个魔法方法即可,同时注意类下的所有方法需要统一缩进,否则会触发语法错误:
lijst = [] class Student: # 构造方法 def __init__(self, voornaam, achternaam): self.__achternaam = achternaam self.__voornaam = voornaam # 姓属性 def setAchternaam(self, achternaam): self.__achternaam = achternaam def getAchternaam(self): return self.__achternaam achternaam = property(getAchternaam, setAchternaam) # 名属性 def setVoornaam(self, voornaam): self.__voornaam = voornaam def getVoornaam(self): return self.__voornaam voornaam = property(getVoornaam, setVoornaam) # 自定义打印内容 def __str__(self): return f"学生:{self.voornaam} {self.achternaam}" def __repr__(self): return self.__str__() # 实例化追加到列表 lijst.append(Student('Quinten' , 'Vollmer')) lijst.append(Student('Jochem' , 'Legue')) lijst.append(Student('Johan' , 'Jansen')) # 现在打印整个列表就会显示可读内容 print(lijst) # 输出:[学生:Quinten Vollmer, 学生:Jochem Legue, 学生:Johan Jansen] # 也可以遍历打印单个实例 for stu in lijst: print(stu)
内容的提问来源于stack exchange,提问作者MisterQ
相关产品推荐
相关产品推荐

