Python中如何给类传递参数?嵌套类传参报错代码求修正
修正后的完整代码
class student: def __init__(self, name, rollno, brand, ram, cpu): self.name = name self.rollno = rollno # 移除多余的外部类self传参,补全cpu参数 self.lap = self.laptop(brand, ram, cpu) def show(self): print(self.name, self.rollno) self.lap.show() class laptop: def __init__(self, brand, ram, cpu): self.brand = brand self.ram = ram self.cpu = cpu def show(self): print(self.brand, self.ram, self.cpu) def __str__(self): # __str__强制要求返回字符串,将多个属性拼接为字符串返回 return f"{self.brand} {self.ram} {self.cpu}" def __str__(self): return f"{self.name} {self.rollno}" # 原代码缩进错误,将实例化和调用代码移到类外部 # 修正传参顺序:原代码将ram和cpu参数传反 s1 = student("Raj", 3, "hp", 16, "i5") s2 = student("Ram", 2, "dell", 8, "i3") s1.show()
原代码问题梳理
- 嵌套类实例化参数错误:外部类初始化时创建laptop实例,多传递了不必要的外部类self参数,同时漏传了cpu参数,参数匹配错误。
__str__方法返回值不符合规范:Python要求__str__方法必须返回字符串类型,原代码直接返回多个属性值会自动封装为元组,运行时会触发类型错误。- 实例化代码缩进错误:s1、s2实例化和show方法调用的代码缩进层级错误,写在了student类内部,属于类成员而非全局执行代码,运行时不会生效还会触发异常。
- 实例化传参顺序错误:student初始化时的参数顺序为name、rollno、brand、ram、cpu,原代码实例化s1、s2时将ram和cpu的参数顺序传反,导致属性赋值错误。
内容的提问来源于stack exchange,提问作者sam2611
相关产品推荐
相关产品推荐

