鱼C论坛

 找回密码
 立即注册
查看: 41|回复: 3

程序出错

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

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

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

x
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
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 前天 19:13 | 显示全部楼层
你的程序出错是因为构造方法的名称写错了。在Python中,构造方法必须使用双下划线 `__init__`(两边各两个下划线),而你写成了单下划线 `_init_`。此外,类中重复定义了两次 `_init_` 方法,导致第二个覆盖了第一个。

以下是修正后的代码:


  1. class D:
  2.     def __init__(self, x, y):  # 正确写法:双下划线
  3.         self.x = x
  4.         self.y = y
  5.    
  6.     def add(self):
  7.         return self.x + self.y
  8.    
  9.     def mul(self):
  10.         return self.x * self.y

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


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

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

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

使用道具 举报

发表于 前天 19:52 | 显示全部楼层
双下划线
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 前天 20:30 | 显示全部楼层
我个新鱼油为什么看不懂萌新交流区的东西
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-18 06:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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