鱼C论坛

 找回密码
 立即注册
查看: 1302|回复: 2

[已解决]关于面向对象的编程中子类继承父类的疑问

[复制链接]
发表于 2020-3-17 11:02:10 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 bananatree 于 2020-3-17 11:05 编辑

我看了视频和我网上的一些博文,发现对于子类继承父类有一种情况没有提及。那就是当父类的def __init__(self,x,y):有参数输入的时候, 子类在对象实例化时给如何输入参数。下面的图片举了一个小甲鱼的课后例子。请大家多多指教 。emmm,简单说就是如何继承有参数输入的父类属性。
我的思路是连点成线,所以线类会继承点类的数据。我只会那种在点类中就明确点属性的方法,不会在实例化中在实例中输入属性的方法,大家帮忙看一下。
可以运行的程序(在点类中定义属性):
import math
class Point():
    def __init__(self,x1=1,y1=1,x2=2,y2=2):
        self.point1=[x1,y1]
        self.point2=[x1,y2]

class Line(Point):
    def __init__(self):
        super().__init__()
        self.x=self.point1[0]-self.point2[1]
        self.y=self.point1[0]-self.point2[1]
        
    def getlen(self):
        return math.sqrt(self.x**2+self.y**2)
   

l=Line()
print(l.getlen())

不会再实例化中定义属性(报错):
import math
class Point():
    def __init__(self,x1,y1,x2,y2):
        self.point1=[x1,y1]
        self.point2=[x1,y2]

class Line(Point):
    def __init__(self):
        super().__init__()
        x=self.point1[1]-self.point2[1]
        y=self.point1[2]-self.point2[2]
        
    def getlen(self):
        return sqrt(self.x**2+self.y**2)
   

l=Line(1,1,2,2)
print(l.getlen())

最佳答案
2020-3-17 11:17:04
有几处错误。在你的基础上帮你修改了一下。
import math
class Point():
    def __init__(self,x1,y1,x2,y2):
        self.point1=[x1,y1]
        self.point2=[x1,y2]

class Line(Point):
    def __init__(self,x1,y1,x2,y2):#这里需要有参数,用来给父类传参
        super().__init__(x1,y1,x2,y2)#给父类传参
        self.x=self.point1[0]-self.point2[0]#x和y前面要写上self,两个point的下标写错了。
        self.y=self.point1[1]-self.point2[1]
        
    def getlen(self):
        return math.sqrt(self.x**2+self.y**2)
    

l=Line(1,1,2,2)
print(l.getlen())

小甲鱼的课后问题

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

使用道具 举报

发表于 2020-3-17 11:17:04 | 显示全部楼层    本楼为最佳答案   
有几处错误。在你的基础上帮你修改了一下。
import math
class Point():
    def __init__(self,x1,y1,x2,y2):
        self.point1=[x1,y1]
        self.point2=[x1,y2]

class Line(Point):
    def __init__(self,x1,y1,x2,y2):#这里需要有参数,用来给父类传参
        super().__init__(x1,y1,x2,y2)#给父类传参
        self.x=self.point1[0]-self.point2[0]#x和y前面要写上self,两个point的下标写错了。
        self.y=self.point1[1]-self.point2[1]
        
    def getlen(self):
        return math.sqrt(self.x**2+self.y**2)
    

l=Line(1,1,2,2)
print(l.getlen())
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-17 11:27:20 | 显示全部楼层
sunrise085 发表于 2020-3-17 11:17
有几处错误。在你的基础上帮你修改了一下。

哇,原来需要传参啊。谢谢老哥了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-24 22:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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