鱼C论坛

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

[已解决]第38讲课后习题编程问题请教

[复制链接]
发表于 2018-7-30 16:32:41 | 显示全部楼层 |阅读模式

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

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

x
定义Point和Line,使用Getline求直线的长度
import math
class Point():
    def __init__(self,x,y):
        self.x = x
        self.y = y
    def getX(self):
        return self.x
    def getY(self):
        return self.y
class Line():
    def __init__(self,p1,p2):
        self.x = p1.getX() - p2.getX()   #这里为什么可以直接调用另一个类中函数getX()
        self.y = p1.getY() - p2.getY()
        self.line =math.sqrt(self.x*self.x + self.y*self.y)
    def Getline(self):
        print(self.line)
p1 = Point(1,7)
p2 = Point(4,2)
line = Line(p1,p2)
line.Getline()

请问:
getX()函数是定义在Point类中,为什么在Line类中就直接调用了,没有通过继承
最佳答案
2018-7-30 19:10:46
因为实例中传入的p1和p2是Point对象,而Point类中定义了getX和getY方法。至于为什么会不报错,因为Python是解释型语言,只有在运行到Line类的__init__方法时,才会判断p1、p2是否有getX和getY方法,如果有这些方法就继续执行,没有的话才会报错。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-7-30 16:39:41 | 显示全部楼层
继承的话应该理解成有同样的属性。您继承您父母的基因,所以您会有您父母的一些特点。get() 是针对类的正式取值方法,没有什么不可以。Line() 这里并不是继承,而是要 Point() 里面的一些资料而已,它跟 Point() 的架构绝然不同。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-30 17:07:37 | 显示全部楼层
因为line类中传入了point对象,该对象当然可以使用它自己的所有方法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-30 19:10:46 | 显示全部楼层    本楼为最佳答案   
因为实例中传入的p1和p2是Point对象,而Point类中定义了getX和getY方法。至于为什么会不报错,因为Python是解释型语言,只有在运行到Line类的__init__方法时,才会判断p1、p2是否有getX和getY方法,如果有这些方法就继续执行,没有的话才会报错。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-18 20:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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