继承:重用已经存在的数据和方法,减少代码量。
子类继承父类所有的属性和方法
1.类属性的继承
#类属性的继承
class Animal(object):
run = True
#Dog类继承Animal类
class Dog(Animal):
pass
#Dog类继承Animal的类属性
print(Dog.run)
2.实例属性继承的两种方法
第一种:父类名.__init__(self,参数名)
第二种:super(子类名,self).__init(name)
#实例属性的继承
class Animal(object):
def __init__(self,name):
self.name = name
class Dog(Animal):
def __init__(self,name,breed,color):
#Dog类继承Animal实例属性
#Animal.__init__(self,name)#第一种方式
super(Dog,self).__init__(name)#第二种方式
self.breed = breed
self.color = color
def info(self):
print('名称{0},种类{1},颜色{2}'.format(self.name,self.breed,self.color))
#Dog类继承Animal的实例属性
dog = Dog("dog","拉布拉多","黑色")
dog.info()
3.子类不继承父类的实例属性
#实例属性的继承
class Animal(object):
def __init__(self,name,age):
self.name = name
self.age = age
class Dog(Animal):
def __init__(self,breed,color):
#不继承父类的实例属性
self.breed = breed
self.color = color
def info(self):
print('种类{0},颜色{1}'.format(self.breed,self.color))
#Dog类继承Animal的实例属性
dog = Dog("拉布拉多","黑色")
dog.info()
4.类方法的继承
class Animal(object):
def move(self):
print("动物都会跑")
class Dog(Animal):
pass
#Dog类继承Animal的move方法
dog = Dog()
dog.move()
5.子类重写父类的方法,执行子类方法
class Animal(object):
def move(self):
print("动物都会跑")
class Dog(Animal):
def __init__(self, age):
self.age = age
def move(self):
print("狗狗大于{0}个月才会跑".format(self.age))
dog = Dog(0.5)
#子类与父类方法名相同,执行子类代码
dog.move()
6.子类没有构造方法时,对子类进行实例化时,会调用父类的构造方法
class Animal(object):
def __init__(self,name):
self.name = name
def move(self):
print("动物都会跑")
class Dog(Animal):
pass
#子类无构造方法,对子类进行实例化时,会调用父类的构造方法
dog = Dog("拉布拉多")
7.子类同时继承多个父类(多个父类要在同一层级),继承原则为从左到右,如果多个父类都有某个方法,则继承左边父类的方法。
class Animal(object):
def move(self):
print("动物都会跑")
class Dog1(Animal):
def move(self):
print("dog1会跑")
class Dog2(Animal):
def move(self):
print("dog2会跑")
#SmallDog类同时继承父类Dog1,Dog2。SmallDog类不能同时继承父类Dog1和Animal类
class SmallDog(Dog1,Dog2):
pass
dog = SmallDog()
#此处继承的是Dog1的move方法
dog.move()