鱼C论坛

 找回密码
 立即注册
查看: 1742|回复: 9

[已解决]python类继承子类怎么访问不到父类的值

[复制链接]
发表于 2018-3-20 19:14:48 | 显示全部楼层 |阅读模式

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

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

x
class C:
    def __init__(self, name, gender, age, zdl):
        self.name, self.gender, self.age, self.zdl = name, gender, age, zdl
        print('创建人物成功,姓名:%s,性别:%s,年龄:%s,初始战斗力:%s' % (self.name, self.gender, self.age, self.zdl))

    def cao(self):
        self.zdl = int(self.zdl) - 200
        print('进入草丛战斗,消耗200战斗力,当前战斗力剩余:%s' % self.zdl)

    def xiu(self):
        self.zdl = int(self.zdl) + 100
        print('自我修炼增长了100战斗力哦!统一江湖下一个就是你,目前战斗力%s' % self.zdl)

    def duoren(self):
        self.zdl = int(self.zdl) - 500
        print('祝玩的愉快,门票500不谢~~~战斗力剩余%s' % self.zdl)


class B(C):
    def __init__(self, zhi):
        self.zhi = zhi
        super.__init__()

    def pd(self):
        if self.zhi == '进入草丛战斗':
            print('diaoyong')
            super.cao()
        if self.zhi == '个人修行':
            B.xiu(self)
        if self.zhi == '多人游戏':
            C.duoren(self)



import easygui

c = C('LK', 'MAN', '24', '1000')
nr = ['进入草丛战斗', '个人修行', '多人游戏']
while True:
    cc = easygui.choicebox('你想干什么', '游戏', nr)
    print(cc)
    b = B(cc)
    b.pd()

    if cc == None:
        break



看到个题目最近正好看到类、继承什么的搞得晕头转向的。这个代码要怎么改才能完美运行呢。
题目是这样的。下面用if判断肯定简单。就是想写一个类来判断,我这个代码错在哪了~
1、创建三个游戏人物,分别是:

苍井井,女,18,初始战斗力1000

东尼木木,男,20,初始战斗力1800

波多多,女,19,初始战斗力2500

2、游戏场景,分别:

草丛战斗,消耗200战斗力

自我修炼,增长100战斗力

多人游戏,消耗500战斗力
最佳答案
2018-3-20 20:53:04
  1. # coding: utf-8
  2. import easygui


  3. class C(object):
  4.     def __init__(self, name, gender, age, zdl):
  5.         self.name, self.gender, self.age, self.zdl = name, gender, age, int(zdl)
  6.         print('创建人物成功,姓名:%s,性别:%s,年龄:%s,初始战斗力:%s' % (self.name, self.gender, self.age, self.zdl))

  7.     def cao(self):
  8.         self.zdl -= 200
  9.         print('进入草丛战斗,消耗200战斗力,当前战斗力剩余:%s' % self.zdl)

  10.     def xiu(self):
  11.         self.zdl += 100
  12.         print('自我修炼增长了100战斗力哦!统一江湖下一个就是你,目前战斗力%s' % self.zdl)

  13.     def duoren(self):
  14.         self.zdl -= 500
  15.         print('祝玩的愉快,门票500不谢~~~战斗力剩余%s' % self.zdl)


  16. class B(C):
  17.     def __init__(self, name, gender, age, zdl, zhi=None):
  18.         self.zhi = zhi
  19.         super().__init__(name, gender, age, zdl)

  20.     def pd(self):
  21.         if self.zhi == '进入草丛战斗':
  22.             super().cao()
  23.         if self.zhi == '个人修行':
  24.             super().xiu()
  25.         if self.zhi == '多人游戏':
  26.             super().duoren()


  27. if __name__ == '__main__':
  28.     b = B('LK', 'MAN', '24', '1000')
  29.     nr = ['进入草丛战斗', '个人修行', '多人游戏']
  30.     while True:
  31.         command = easygui.choicebox('你想干什么', '游戏', nr)
  32.         if command is None:
  33.             break
  34.         b.zhi = command
  35.         b.pd()
复制代码


粗略改一下,能运行,但是很多不严谨的地方。可以参考一下语法方面的使用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-3-20 19:29:11 | 显示全部楼层
super().method()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-20 20:08:21 From FishC Mobile | 显示全部楼层
第四时空 发表于 2018-3-20 19:29
super().method()

意思是用super()方法么。你看我下面三个里面有一个用了也不行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-20 20:12:35 | 显示全部楼层
草地上200
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-20 20:33:55 | 显示全部楼层

你在想什么大佬~~帮我解决解决问题。报错是找不到name的值。子类没有继承到父类的值似得
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-20 20:39:52 | 显示全部楼层
弟大勿波 发表于 2018-3-20 20:08
意思是用super()方法么。你看我下面三个里面有一个用了也不行

super后面有()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-20 20:41:36 | 显示全部楼层
本帖最后由 塔利班 于 2018-3-20 20:52 编辑
弟大勿波 发表于 2018-3-20 20:33
你在想什么大佬~~帮我解决解决问题。报错是找不到name的值。子类没有继承到父类 ...


你要继承父类哪些属性,如果父类init的参数都要,,请把父类的参数也加到你的init函数里,
并且把父类对应的init参数写到super().__init__()的括号里
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-20 20:53:04 | 显示全部楼层    本楼为最佳答案   
  1. # coding: utf-8
  2. import easygui


  3. class C(object):
  4.     def __init__(self, name, gender, age, zdl):
  5.         self.name, self.gender, self.age, self.zdl = name, gender, age, int(zdl)
  6.         print('创建人物成功,姓名:%s,性别:%s,年龄:%s,初始战斗力:%s' % (self.name, self.gender, self.age, self.zdl))

  7.     def cao(self):
  8.         self.zdl -= 200
  9.         print('进入草丛战斗,消耗200战斗力,当前战斗力剩余:%s' % self.zdl)

  10.     def xiu(self):
  11.         self.zdl += 100
  12.         print('自我修炼增长了100战斗力哦!统一江湖下一个就是你,目前战斗力%s' % self.zdl)

  13.     def duoren(self):
  14.         self.zdl -= 500
  15.         print('祝玩的愉快,门票500不谢~~~战斗力剩余%s' % self.zdl)


  16. class B(C):
  17.     def __init__(self, name, gender, age, zdl, zhi=None):
  18.         self.zhi = zhi
  19.         super().__init__(name, gender, age, zdl)

  20.     def pd(self):
  21.         if self.zhi == '进入草丛战斗':
  22.             super().cao()
  23.         if self.zhi == '个人修行':
  24.             super().xiu()
  25.         if self.zhi == '多人游戏':
  26.             super().duoren()


  27. if __name__ == '__main__':
  28.     b = B('LK', 'MAN', '24', '1000')
  29.     nr = ['进入草丛战斗', '个人修行', '多人游戏']
  30.     while True:
  31.         command = easygui.choicebox('你想干什么', '游戏', nr)
  32.         if command is None:
  33.             break
  34.         b.zhi = command
  35.         b.pd()
复制代码


粗略改一下,能运行,但是很多不严谨的地方。可以参考一下语法方面的使用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-20 21:17:13 | 显示全部楼层
第四时空 发表于 2018-3-20 20:53
粗略改一下,能运行,但是很多不严谨的地方。可以参考一下语法方面的使用

谢谢。大概明白子类调用父类值的方法了。在子类中还要把父类的__init__的参数都写进来。我还以为可以直接调用了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-20 22:03:48 | 显示全部楼层
塔利班 发表于 2018-3-20 20:41
你要继承父类哪些属性,如果父类init的参数都要,,请把父类的参数也加到你的init函数里,
并且把父类 ...

明白了。但是这样的话clss之间的数据传递不是很麻烦了么。如果输入数据越来越多是不是实例化的时候就得输入一串了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 07:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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