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
相关产品推荐
相关产品推荐

