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)
全世界的程序员们联合起来吧!