python类的继承super()的使用

类的继承中,如果要全部继承父类的话,但是自己的init方法又想要初始化新的属性,如下:

class Animal():

    def __init__(self, name, age):
        self.name = name
        self.age = age

    def eat(self):
        return "我在吃东西"

    def sleep(self):
        print("animal {} is sleep".format(self.name))
        return "我在睡觉觉"

    def __repr__(self):
        return "my name:{},age:{}".format(self.name,self.age)


class WaterBird(Animal):
    # 继承animal的属性方法init后,想要加入自己的属性weight
    def __init__(self,name,weight):
        self.name=name
        self.weight=weight
    def swim(self):
        return "我能游泳"
    def __repr__(self):
        return "我的名字:{},我的年龄:{}".format(self.name,self.age)


waterbird=WaterBird("水鸟","8")
print(waterbird)

  这样写,有什么问题吗?,运行一下:

 报错:因为waterbird重新定义了init方法,原来animal的init的方法就没有了,就被覆盖掉了,如过还想要原来animal的属性怎么办呢?

class Animal():

    def __init__(self, name, age):
        self.name = name
        self.age = age

    def eat(self):
        return "我在吃东西"

    def sleep(self):
        print("animal {} is sleep".format(self.name))
        return "我在睡觉觉"

    def __repr__(self):
        return "my name:{},age:{}".format(self.name,self.age)


class WaterBird(Animal):
    # 继承animal的属性方法init后,想要加入自己的属性weight
    def __init__(self,name,weight,age):
        # 通过super()方法,继承下原来animal的init方法
        super().__init__(name,age)
        self.weight=weight
    def swim(self):
        return "我能游泳"
    def __repr__(self):
        return "我的名字:{},我的年龄:{}".format(self.name,self.age)


waterbird=WaterBird("水鸟","8","3")
print(waterbird)

  

全世界的程序员们联合起来吧!
原文地址:https://www.cnblogs.com/chaojiyingxiong/p/15109159.html