老师,问一下super调用父类的用法

来源:2-1 类的继承

20夜风来袭

2020-03-13 00:14:02

"""
猫科动物的细化
   Tiger 类             Panda 类            Petcat 类
                                       DuanCat 类     HuaCat类
"""


class BaseCat(object):
   """
   猫科动物的基础类
   """
   tag = '猫科动物'
   def __init__(self,name):
       self.name = name

   def eat(self):
       """猫吃东西"""
       print('猫都要吃东西')


class Tiger(BaseCat):
   """
   老虎类 也是猫科动物
   """
   def eat(self):
       super(Tiger,self).eat()        #调用父类方法
       print("我还喜欢吃肉,大猪肉")

class Panda(BaseCat):
   """
   熊猫类 也是猫科动物
   """
   pass

class PetCat(BaseCat):
   """
   家猫类
   """
   def eat(self):
       super(PetCat, self).eat()  # 调用父类方法
       print("我还喜欢吃猫粮食")


class HuaCat(PetCat):
   """
   中华田园猫
   """
   def eat(self):
       super(HuaCat, self).eat()  # 调用父类方法
       print("我还喜欢吃零食")

class DuanCat(PetCat):
   """
   英国短毛
   """
   def eat(self):
       print("我啥都吃")

if __name__ == '__main__':
   cat = HuaCat('小黄')   #实例化中华田园猫
  # print(cat)
   cat.eat()
   print("---------------------------------")
   DuanCat('小辉').eat()

   #子类的判断
   print(issubclass(DuanCat, BaseCat))
   print(issubclass(DuanCat, PetCat))
   print(issubclass(DuanCat, Tiger))
"""
老师  我想问一下这串代码,其中在下面super后面把HuaCat改成PetCat也能执行,但是执行结果不一样了,然后把HuaCat改成BaseCat不能执行,是因为调用父类而不能写成父类吗??
class HuaCat(PetCat):
   """
   中华田园猫
   """
   def eat(self):
       super(BaseCat, self).eat()  # 调用父类方法,
       print("我还喜欢吃零食")
"""




写回答

1回答

好帮手慕笑蓉

2020-03-13

同学,你好。因为BaseCat类的父类是object类,这个类中没有定义eat()方法,所以报错,分析如下:

  1. super(BaseCat, self).eat()方法调用的是BaseCat的父类object,object类中没有定义eat()方法,程序运行报错;

  2. super(HuaCat, self).eat()方法调用的是HuaCat的父类PetCat,PetCat类中定义了eat()方法,程序运行成功;

  3. super(PetCat, self).eat()方法调用的是PetCat的父类BaseCat,BaseCat类中定义了eat()方法,程序运行成功;

如果解决了你的疑惑,请采纳,祝学习愉快~ 


1
h0夜风来袭
h 老师很耐心,完美解决了我的问题~~~
h020-03-13
共3条回复

0 学习 · 8160 问题

查看课程