You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 13:54:02