鱼C论坛

 找回密码
 立即注册
查看: 2107|回复: 5

038课后求助__init__有返回值没报错

[复制链接]
发表于 2017-10-25 21:09:08 | 显示全部楼层 |阅读模式
5鱼币
这节课后题我遇到问题,下边是我第2题答案,代码是我动动手答案
动动手中我试着用__init__返回值,竟然成功了,不是说只能返回None吗?
求解释(try 是为了避免 窗体点取消时报错,请忽略,不加结果是一样的)
#1报错,__init__()方法不能有返回值,动手第一题并不是这样的

  1. #求长度

  2. import math as m
  3. import easygui as eg

  4. class Point:
  5.     def __init__(self):
  6.         try:
  7.             return eg.multenterbox("请输入坐标:","",("X","Y"),(0,0))
  8.         except:
  9.             pass
  10. class Line(Point):
  11.     def __init__(self):
  12.         self.point1=super().__init__()
  13.         self.point2=super().__init__()
  14.     def getlength(self):
  15.         try:
  16.             x1=float(self.point1[0])
  17.             y1=float(self.point1[1])
  18.             x2=float(self.point2[0])
  19.             y2=float(self.point2[1])
  20.             l=m.sqrt((x1-x2)**2+(y1-y2)**2)
  21.             eg.msgbox("长度为:%.2f" % l)
  22.         except:
  23.             pass
复制代码

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-10-26 09:05:36 | 显示全部楼层
我觉得是子类的init函数将父类的给屏蔽了,所以根本就没有调用父类的init,因为python中真正的构造函数其实是__new__
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-11-8 19:53:57 | 显示全部楼层
BngThea 发表于 2017-10-26 09:05
我觉得是子类的init函数将父类的给屏蔽了,所以根本就没有调用父类的init,因为python中真正的构造函数其实 ...

不是不给你最佳,而是我没看懂你的回复,我觉得是Line继承了Point ,然后具有Point中__init__的方法,并不需要调用Point类的__init__,所以就没有报错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-11-8 21:09:19 | 显示全部楼层
s627995568 发表于 2017-11-8 19:53
不是不给你最佳,而是我没看懂你的回复,我觉得是Line继承了Point ,然后具有Point中__init__的方法,并不 ...

最佳什么的无所谓,共同学习
建议你在Point类中的__init__函数开头加入一个print函数进行一下简单的测试,万一真的没有执行这个print呢就表面确实没有调用父类的__init__函数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-11-13 20:36:21 | 显示全部楼层
BngThea 发表于 2017-11-8 21:09
最佳什么的无所谓,共同学习
建议你在Point类中的__init__函数开头加入一个print函数进行一下简单的测试 ...

试了一下,父类的确被调用了,你说的屏蔽也对,子类是重写了__init__,但是,他还是调用了父类的__init__才得到了point1 和point2 的值,只是他调用的是 类对象方法,并不是实例化对象方法,也就是说父类没有实例化对象,Point类对象的__init__方法是可以有返回值的,只要Point类不实例化,就不会报错,不知道是不是跟这个有关
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-11-13 20:37:01 | 显示全部楼层
s627995568 发表于 2017-11-13 20:36
试了一下,父类的确被调用了,你说的屏蔽也对,子类是重写了__init__,但是,他还是调用了父类的__init__ ...

@小甲鱼
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 18:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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