1. 程式人生 > 其它 >python類的繼承super()的使用

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)

  

全世界的程式設計師們聯合起來吧!