1322703365@qq.c 发表于 2018-7-30 16:32:41

第38讲课后习题编程问题请教

定义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类中就直接调用了,没有通过继承

claws0n 发表于 2018-7-30 16:39:41

继承的话应该理解成有同样的属性。您继承您父母的基因,所以您会有您父母的一些特点。get() 是针对类的正式取值方法,没有什么不可以。Line() 这里并不是继承,而是要 Point() 里面的一些资料而已,它跟 Point() 的架构绝然不同。

BngThea 发表于 2018-7-30 17:07:37

因为line类中传入了point对象,该对象当然可以使用它自己的所有方法

fqaipy 发表于 2018-7-30 19:10:46

因为实例中传入的p1和p2是Point对象,而Point类中定义了getX和getY方法。至于为什么会不报错,因为Python是解释型语言,只有在运行到Line类的__init__方法时,才会判断p1、p2是否有getX和getY方法,如果有这些方法就继续执行,没有的话才会报错。
页: [1]
查看完整版本: 第38讲课后习题编程问题请教