夏瑾 发表于 2025-7-16 19:12:36

程序出错

class D:
    def _init_(self,x,y):
      self.x=x
      self.y=y
    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

d=D(3,4)
Traceback (most recent call last):
File "<pyshell#99>", line 1, in <module>
    d=D(3,4)
TypeError: D() takes no arguments

FishC 发表于 2025-7-16 19:13:15

你的程序出错是因为构造方法的名称写错了。在Python中,构造方法必须使用双下划线 `__init__`(两边各两个下划线),而你写成了单下划线 `_init_`。此外,类中重复定义了两次 `_init_` 方法,导致第二个覆盖了第一个。

以下是修正后的代码:


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

d = D(3, 4)# 现在可以正常创建实例
print(d.add())# 输出 7
print(d.mul())# 输出 12


错误原因分析:
1. 将 `_init_` 改为 `__init__`(两边各两个下划线)
2. 删除了重复的构造方法定义
3. 现在 `D(3,4)` 能正确调用构造方法初始化属性

注意:Python 的魔法方法(如构造方法)都需要用双下划线包围,常见的有:
- `__init__`:构造方法
- `__str__`:对象字符串表示
- `__len__`:获取长度

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

某一个“天” 发表于 2025-7-16 19:52:41

双下划线

未来的黑客-TK 发表于 2025-7-16 20:30:01

我个新鱼油为什么看不懂萌新交流区的东西{:10_266:}{:10_266:}{:10_266:}
页: [1]
查看完整版本: 程序出错