鱼C论坛

 找回密码
 立即注册
查看: 60|回复: 2

程序出错

[复制链接]
发表于 3 天前 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
class D:
    def  __init__(self,x,y):
        self.x=x
        self.y=y
    def add(self):
        return self.x+self.y
    def mul(self):
        return self.x*self.y
class E(D):
    def __init__(self,x,y,z):
        super().__init__()
        self.z=z
    def add(self):
        return D.add(self)+self.z
    def mul(self):
        return D.mul(self)*self.z

   

e=E(2,3,4)
Traceback (most recent call last):
  File "<pyshell#131>", line 1, in <module>
    e=E(2,3,4)
  File "<pyshell#129>", line 3, in __init__
    super().__init__()
TypeError: D.__init__() missing 2 required positional arguments: 'x' and 'y'
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 3 天前 | 显示全部楼层
您好!程序出错的原因是子类 `E` 在调用父类 `D` 的构造函数时没有传递必需的参数 `x` 和 `y`。以下是修正后的代码和说明:

### 错误原因
在 `E` 类的构造函数中:
[code=python]
super().__init__()  # 缺少参数 x 和 y
[/code]
父类 `D` 的构造函数需要两个参数 `x` 和 `y`,但调用时未传递。

### 修正步骤
修改 `E` 类的构造函数,将接收到的 `x` 和 `y` 传递给父类:
[code=python]
class D:
    def __init__(self, x, y):
        self.x = x
        self.y = y
    def add(self):
        return self.x + self.y
    def mul(self):
        return self.x * self.y

class E(D):
    def __init__(self, x, y, z):
        super().__init__(x, y)  # 正确传递 x 和 y
        self.z = z
    def add(self):
        return super().add() + self.z  # 推荐用 super() 调用父类方法
    def mul(self):
        return super().mul() * self.z

# 测试
e = E(2, 3, 4)
print(e.add())  # 输出: 2+3+4=9
print(e.mul())  # 输出: 2*3*4=24
[/code]

### 关键修改
1. super().__init__(x, y):将子类的 `x` 和 `y` 传递给父类初始化。
2. 改用 super().add() 替代 D.add(self),避免硬编码父类名。

### 为何推荐 `super()`?
- 避免直接写死父类名(如 `D.add(self)`),提高代码可维护性。
- 在多继承场景下更安全。

运行修正后的代码即可正常使用子类 `E` 的功能!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 3 天前 | 显示全部楼层
你传x,y 啊,父类的方法也得传参
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-19 10:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表