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

Python类中__str__方法触发TypeError:缺少必需位置参数'acc'的问题求助

解决__str__()引发的TypeError问题

错误原因分析

你遇到的TypeError: __str__() missing 1 required positional argument: 'acc',核心问题是Python的__str__特殊方法只能接受self这一个参数。

当你调用print(acc)时,Python会自动调用acc.__str__(),不会传递额外的参数。但你定义的__str__(self, acc)强制要求传入第二个参数,这就导致了参数缺失的错误。而且你的逻辑里用acc来判断当前对象是否是learn类实例也是多余的——self本身就是当前learn类的实例,不需要额外传入参数来判断。


解决方案

根据你的需求,分两种情况处理:

情况1:让__str__返回当前对象的字符串描述(常规用法)

直接修改__str__方法,移除多余的acc参数,只保留self,然后返回对象的信息即可:

class learn:
    def __init__(self, first_name: str, last_name: str, age: int):
        self.first_name = first_name
        self.last_name = last_name
        self.age = age
    def __str__(self):
        # self本身就是learn类的实例,无需额外判断
        return f'My name is {self.first_name} {self.last_name} and I am {self.age}'

acc = learn('Ranjeet', 'Kumar', 22)
print(acc)  # 输出: My name is Ranjeet Kumar and I am 22

情况2:需要检查其他对象是否是learn类实例(单独写方法)

如果你的初衷是想实现一个“检查对象是否属于learn类”的功能,不要把这个逻辑放在__str__里,应该单独定义一个方法,比如is_learn_instance:

class learn:
    def __init__(self, first_name: str, last_name: str, age: int):
        self.first_name = first_name
        self.last_name = last_name
        self.age = age
    def __str__(self):
        return f'My name is {self.first_name} {self.last_name} and I am {self.age}'
    
    def is_learn_instance(self, acc):
        if isinstance(acc, learn):
            return f"{acc} is an instance of learn class"
        raise Exception(f"{acc} is not of class learn ")

acc = learn('Ranjeet', 'Kumar', 22)
print(acc)  # 输出对象的字符串描述
print(acc.is_learn_instance(acc))  # 检查对象类型

内容的提问来源于stack exchange,提问作者Ranjeet_123

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 06:48:04