鱼C论坛

 找回密码
 立即注册
查看: 3636|回复: 18

[已解决]两个类的继承

[复制链接]
发表于 2020-2-25 18:08:56 | 显示全部楼层 |阅读模式

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

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

x
import math

class Point():
    def __init__(self, x=0, y=0):
        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()
        self.y = p1.getY() - p2.getY()
        self.len = math.sqrt(self.x*self.x + self.y*self.y)

    def getLen(self):
        return self.len
------------------------------------------------
Point()和Line()两个类没有关系  为什么 p1.getX()中p1可以调用Point()类中的getX()
最佳答案
2020-2-25 19:12:29
忐忑忑 发表于 2020-2-25 19:08
我想在真的蒙了  就是为什么在line这个类中可以这么写 ----->  p1.getX()
getX()这个方法是point类中 ...

今天跟你杠上了,必须拿到最佳答案!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-2-25 18:19:30 | 显示全部楼层
因为 p1 跟 Point() 有关系,当然,只限于你的代码里。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-25 18:23:06 | 显示全部楼层
你实例化或者调用 Line()的时候p1,p2是形参呀,你要传入p1 实例化的Point 呀
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-25 18:23:15 | 显示全部楼层
°蓝鲤歌蓝 发表于 2020-2-25 18:19
因为 p1 跟 Point() 有关系,当然,只限于你的代码里。

p1不是Line()的传入参数吗,p1调用Point()中的方法  为什么不会报错
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-25 18:26:44 | 显示全部楼层
_摆架_回宫、 发表于 2020-2-25 18:23
你实例化或者调用 Line()的时候p1,p2是形参呀,你要传入p1 实例化的Point 呀

你的意思是需要两个p1不一样,函数里面的p1需要p1=Point()
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-25 18:28:19 | 显示全部楼层
_摆架_回宫、 发表于 2020-2-25 18:23
你实例化或者调用 Line()的时候p1,p2是形参呀,你要传入p1 实例化的Point 呀

但是 我不实例化point为p1 这样写也报错
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-25 18:41:44 | 显示全部楼层
忐忑忑 发表于 2020-2-25 18:28
但是 我不实例化point为p1 这样写也报错

服了你了,你到底想怎么弄,完整代码贴出来,你就写两个类,又不调用,不知道你写了干啥!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-25 18:44:45 | 显示全部楼层
忐忑忑 发表于 2020-2-25 18:23
p1不是Line()的传入参数吗,p1调用Point()中的方法  为什么不会报错

参数调用方法怎么会报错呢? 在没具体传入值的时候,程序都还不知道这个参数是什么,这如果就报错了,那还怎么写代码?
打个比方,随便写个函数
  1. def test(a):
  2.    return a+5
复制代码

照你的说法,这个函数也会报错,因为 a + 5 本质是调用了python内置 int 类的 add() 方法, a 是test 的参数,又调用 int 类中的方法,所以会报错(按照你的思维)。
可是很明显,这个函数并不会报错。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-25 18:52:33 | 显示全部楼层
本帖最后由 _摆架_回宫、 于 2020-2-25 18:53 编辑

  1. import math

  2. class Point():
  3.     def __init__(self, x=0, y=0):
  4.         self.x = x
  5.         self.y = y

  6.     def getX(self):
  7.         return self.x

  8.     def getY(self):
  9.         return self.y

  10. class Line():
  11.     def __init__(self, p1, p2):
  12.         self.x = p1.getX() - p2.getX()
  13.         self.y = p1.getY() - p2.getY()
  14.         self.len = math.sqrt(self.x*self.x + self.y*self.y)

  15.     def getLen(self):
  16.         return self.len
  17. p1 = Point(5,10)
  18. p2 = Point(8,10)

  19. len = Line(p1,p2).getLen()
  20. print(len)
复制代码

你是不是想实现这样的效果
最佳答案 拿过来
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-25 18:52:57 | 显示全部楼层
_摆架_回宫、 发表于 2020-2-25 18:41
服了你了,你到底想怎么弄,完整代码贴出来,你就写两个类,又不调用,不知道你写了干啥!

>>> p3 = Point(1, 1)
>>> p4 = Point(4, 5)
>>> line = Line(p3, p4)
>>> line.getLen()
5.0


这就是接下来的代码了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-25 18:55:01 | 显示全部楼层
忐忑忑 发表于 2020-2-25 18:52
>>> p3 = Point(1, 1)
>>> p4 = Point(4, 5)
>>> line = Line(p3, p4)

p3,p4是实参,p1,p2是形参,用来接收p3.p4的呀
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-25 19:01:55 | 显示全部楼层
兄弟整蒙逼了把,形参和实参分不清楚了!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-25 19:02:37 | 显示全部楼层
_摆架_回宫、 发表于 2020-2-25 18:55
p3,p4是实参,p1,p2是形参,用来接收p3.p4的呀

两个没有关系的类   其中的方法可以相互调用是吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-25 19:07:20 | 显示全部楼层
本帖最后由 _摆架_回宫、 于 2020-2-25 19:09 编辑
忐忑忑 发表于 2020-2-25 19:02
两个没有关系的类   其中的方法可以相互调用是吗


怎么没有关系你不是把。Point实例化成p3,p4传入line实例化了吗?
你不是传入了p3.p4
p3.p4不就是point()的实例化对象吗
p3,p4不就是point吗
不传入到line里面,为什么不可以调用?
按照你的意思,两个类写的时候没有关系。但是你实例化调用以后他们就有关系了,夫妻关系
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-25 19:08:30 | 显示全部楼层
_摆架_回宫、 发表于 2020-2-25 19:01
兄弟整蒙逼了把,形参和实参分不清楚了!

我想在真的蒙了  就是为什么在line这个类中可以这么写 ----->  p1.getX()
getX()这个方法是point类中的
point和line并不是父类和子类的关系
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-25 19:12:29 | 显示全部楼层    本楼为最佳答案   
忐忑忑 发表于 2020-2-25 19:08
我想在真的蒙了  就是为什么在line这个类中可以这么写 ----->  p1.getX()
getX()这个方法是point类中 ...

今天跟你杠上了,必须拿到最佳答案!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-25 19:17:34 | 显示全部楼层
_摆架_回宫、 发表于 2020-2-25 19:12
今天跟你杠上了,必须拿到最佳答案!

如果不是在两个不同的类中  我应该可以理解 就好比c++那种一个函数套一个函数

可这是两个不同的类,并不存在调用关系,为什么方法可以互调
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-25 19:35:16 | 显示全部楼层
°蓝鲤歌蓝 发表于 2020-2-25 18:44
参数调用方法怎么会报错呢? 在没具体传入值的时候,程序都还不知道这个参数是什么,这如果就报错了,那 ...

参数调用方法是不会报错,但是它调用的是其他类的方法啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-25 21:04:02 | 显示全部楼层
本帖最后由 °蓝鲤歌蓝 于 2020-2-25 21:07 编辑
忐忑忑 发表于 2020-2-25 19:35
参数调用方法是不会报错,但是它调用的是其他类的方法啊


我写的例子里的参数 调用的就不是其他类的方法了?
a + 5 这一步调用的就是别的类的方法,调用的是 int 类的 add() 方法,我上面就说过了的。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-3-2 03:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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