python類的繼承super()的使用
阿新 • • 發佈:2021-08-06
類的繼承中,如果要全部繼承父類的話,但是自己的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)
全世界的程式設計師們聯合起來吧!