鱼C论坛

 找回密码
 立即注册
查看: 500|回复: 8

[已解决]刚学到继承,我想问一个关于简单的继承的问题

[复制链接]
发表于 2019-3-5 14:59:56 | 显示全部楼层 |阅读模式

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

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

x
  1. class Bird:
  2.    
  3.     def __init__(self, x, y):
  4.         self.x = 1
  5.         self.y = 2
  6.         
  7.    
  8.     def fly(self):
  9.         
  10.         print('I CAN FLY')
  11.         
  12.     def cal(self):
  13.         
  14.         return self.x + self.y
  15.    
  16.    
  17.         
  18. class Peg(Bird):
  19.    
  20.     def __init__(self):
  21.         super().__init__()
  22.         
  23.         self.sp = 1
  24.      
  25.    
  26.     def fly(self):
  27.         
  28.         print('no, i can\'t')
  29.         
  30.         
  31.     def express(self):
  32.    
  33.         return self.sp

  34.         
  35. bird = Bird(3, 4)


  36. peg = Peg(3, 4)
复制代码


bird这个父类需要传入两个参数,在子类中我重写了__intit__之后又继承了父类的__init__. 但是在实例中传入两个参数后为啥还会报错啊?

报错:TypeError: __init__() takes 1 positional argument but 3 were given
最佳答案
2019-3-5 15:10:19
既然父类需要传入两个参数,那么你在子类中的init中也需要传递给父类
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-3-5 15:01:18 | 显示全部楼层
是我super没调用对吗。。。还是别的地方出错了,有劳各位了。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-5 15:10:19 | 显示全部楼层    本楼为最佳答案   
既然父类需要传入两个参数,那么你在子类中的init中也需要传递给父类
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-5 15:14:13 | 显示全部楼层
Peg的init要写成
super().__init__(x, y)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-3-5 16:06:08 | 显示全部楼层
BngThea 发表于 2019-3-5 15:10
既然父类需要传入两个参数,那么你在子类中的init中也需要传递给父类

谢谢,我明白了,是不是不仅要在子类重写的init中传入两个参数,而且还有super的init中还要写啊

class Peg(Bird):
   
    def __init__(self, x, y):
        super().__init__(x, y)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-5 16:07:19 | 显示全部楼层
dhhcj 发表于 2019-3-5 16:06
谢谢,我明白了,是不是不仅要在子类重写的init中传入两个参数,而且还有super的init中还要写啊

class ...

是,这样逻辑清晰
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-3-5 16:24:57 | 显示全部楼层
BngThea 发表于 2019-3-5 16:07
是,这样逻辑清晰

谢谢!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-3-5 16:41:53 | 显示全部楼层
BngThea 发表于 2019-3-5 16:07
是,这样逻辑清晰

但是,我突然又想到,当我们不希望子类像父类一样有初始参数,但是又希望调用父类的所有方法的话该怎么办呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-5 16:45:45 | 显示全部楼层
dhhcj 发表于 2019-3-5 16:41
但是,我突然又想到,当我们不希望子类像父类一样有初始参数,但是又希望调用父类的所有方法的话该怎么办 ...

设置默认参数,就可以不用传了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-22 03:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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