夏瑾 发表于 2025-7-16 19:32:55

程序出错

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'

FishC 发表于 2025-7-16 19:33:39

您好!程序出错的原因是子类 `E` 在调用父类 `D` 的构造函数时没有传递必需的参数 `x` 和 `y`。以下是修正后的代码和说明:

### 错误原因
在 `E` 类的构造函数中:

super().__init__()# 缺少参数 x 和 y

父类 `D` 的构造函数需要两个参数 `x` 和 `y`,但调用时未传递。

### 修正步骤
修改 `E` 类的构造函数,将接收到的 `x` 和 `y` 传递给父类:

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


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

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

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

某一个“天” 发表于 2025-7-16 19:51:50

你传x,y 啊,父类的方法也得传参
页: [1]
查看完整版本: 程序出错