假设我们有一个动物类Animal,里面有两个属性name、age,和两个方法sleep()和eat()。
animal.py
1 class Animal(): 2 3 def __init__(self,name,age): 4 self.name = name 5 self.age = age 6 7 def eat(self): 8 print("Animal " + self.name + " is eating foods") 9 10 def sleep(self): 11 print("Animal " + self.name + " is sleeping")
假设我们还有一个Dog类,它也包含这两个属性和这两个方法,还有自己特有的属性(color)和方法(dark)。
dog.py
1 from animal import Animal 2 3 class Dog(Animal): 4 def __init__(self,name,age,color): 5 super().__init__(name,age) 6 self.color = color 7 8 def bark(self): 9 print("Dog " + self.name + " is barking ,it is " + self.color) 10 11 12 my_dog = Dog('kimi',18,'red') 13 my_dog.bark() 14 my_dog.eat() 15 my_dog.sleep()
在我们编写dog类的时候,就不需要在重新写那两个已在Animal类中的方法,我们直接继承过来就可以使用了,第一行代码导入Animal 类用于Dog类的继承,导入类语法:from 模块名 import 类名。
第三行,我们将Animal 类传入Dog()中,表示Dog继承Animal,而第五行的super() 表示调用父类的__init__() 方法进行初始化,Dog中还有自己特定的属性color (颜色),因为Animal 中没有color这个属性,所以我们需要单独使用 self.color=color 语句赋值,Dog类还有自己特定的方法,bark() 狗吠的方法,所以第13、14、15行代码,既可以调用自己类中特定的方法还可以调用父类Animal中所有的方法。
我们也可以在给类初始化时,赋予默认值,这样就不用传递每个参数,将Dog类中的__init__() 重新编写:
def __init__(self,name,age,color=‘blue’): super().__init__(name,age) self.color = color
此时如果我们不传入color 则,color默认为blue。
重写父类方法
我们可以重写父类中的方法,只需要和父类中方法名和形参数量相同即可。
我的问题在于,读书不多,而想的太多