继承机制通常用于创建和现有类功能类似的新类,或者是新类只需要在现有类的基础上添加一些新 的属性和方法。但又不想将现有类的代码复制到新类上。简而言之继承就是可以轻松的实现类的重复使用。
假设有两类汽车。一大一小首先小的汽车有自动挡和自动大灯的功能。 而大的汽车在具备了小汽车的两项功能后还有自动驾驶的功能。 不难发现这两辆车都具有相同的功能。 在创建类时最笨的办法就是把相同的代码写两遍。
class Automobile:
def fun(self):
print("这是自动挡的功能")
def fun1(self):
print("这是自动大灯的功能")
class BigAutomobile:
def fun(self):
print("这是自动挡的功能")
def fun1(self):
print("这是自动大灯的功能")
def fun2(self):
print("这是自动驾驶的功能")
这种方式虽然可以达到最终的目的但是存在一些问题。 比如说会出现重复的代码。而且随着类中相同功能的增多就越明显。更简单的做法是使用继承机制。其实现思路是让BigAutomobile继承Automobile,这样一来假如在BigAutomobile要调用关于自动挡的功能。那么解释器会先去BigAutomobile中找关于自动挡的功能。如果找的到就使用。如果找不到则会自动去Automobile去找。示例如下:
class Automobile:
def fun(self):
print("这是自动挡的功能")
def fun1(self):
print("这是自动大灯的功能")
class BigAutomobile(Automobile):
def fun2(self):
print("这是自动驾驶的功能")
class Automobile:
def fun(self):
print("这是自动挡的功能")
def fun1(self):
print("这是自动大灯的功能")
class RedAutomobile:
name = "小张"
age = 36
class Person:
city = "成都"
class BigAutomobile(Automobile, RedAutomobile, Person):
def fun2(self):
print("这是自动驾驶的功能")
class Automobile:
def fun(self):
print("这是自动挡的功能")
def fun1(self):
print("这是自动大灯的功能")
class RedAutomobile:
name = "小张"
age = 36
class Person:
city = "成都"
class BigAutomobile(Automobile, RedAutomobile, Person):
def fun2(self):
print("这是自动驾驶的功能")
a = BigAutomobile()
print(a.name)
print(a.city)
a.fun()
a.fun1()
a.fun2()
小张
成都
这是自动挡的功能
这是自动大灯的功能
这是自动驾驶的功能
既然类支持多继承那么就不得不面临一个严重的问题。就是多个父类中可能会出现多个同名的属性或方法。python的出处理机制是:根据子类继承多个父类时这些父类的前后顺序决定,即排在前面父类中的类方法会覆盖后面父类中的同名类方法。
class Automobile:
name = "小王"
def fun(self):
print("这是自动挡的功能")
def fun1(self):
print("这是自动大灯的功能")
class RedAutomobile:
name = "小张"
age = 36
class Person:
city = "成都"
def fun1(self):
print("这是一个同名方法")
class BigAutomobile(Automobile, RedAutomobile, Person):
def fun2(self):
print("这是自动驾驶的功能")
a = BigAutomobile()
print(a.name)
a.fun1()
小王
这是自动大灯的功能