面向对象特征(继承)
1. 什么是继承
## 继承就是新建类的一种方式,新建的类我们称为 子类或者派生类, 被继承的类我们称之为父类或者 基类
# 继承的特性是:子类可以使用父类中的属性或者方法
# 继承是类与类之间的关系
2.为什么要用继承
# 类解决了对象与对象之间代码冗余的问题
# 继承则解决的类与类之间的代码冗余问题
3. 如何使用继承
# 新式类:继承了object类的子子孙孙类都是新式类
# 经典类:没有继承object类的子子孙孙类都是经典类
# 新式类与经典类只有在python2中才区分
# python3都为新式类
基本使用
1. 不适用继承:
# 不使用继承
class Animal:
def run(self):
print('走路')
def eat(self):
print('吃饭')
class Dog:
def run(self):
print('走路')
def eat(self):
print('吃饭')
def speak(self):
print('汪汪叫')
class Person:
def run(self):
print('走路')
def eat(self):
print('吃饭')
def work(self):
print('上班')
# 这样人和狗都有共同的特性 走路和吃饭 就有重复的特性 使得代码冗余
# 这样就可以使用继承来解决这个问题
2.使用继承
class Animal: # 它作为父类(基类)
head = 'from Animal head'
def run(self):
print('走路')
def eat(self):
print('吃饭')
# Dog子类和Person子类都继承Animal父类
class Dog(Animal):
def speak(self):
print('汪汪叫')
class Person(Animal):
def work(self):
print('工作')
dog = Dog() # 实例化
dog.eat() # 找到父类Animal的eat方法
print(dog.head) # 找到父类Animal的head属性
多继承
eg:
# 新式类:按照广度优先查询
# 经典类:按照深度优先查询
class A(object):
def test(self):
print('from A')
class B(A):
# def test(self):
# print('from B')
pass
class C(A):
# def test(self):
# print('from C')
pass
class D(B):
# def test(self):
# print('from D')
pass
class E(C):
# def test(self):
# print('from E')
pass
class F(D, E): # 多继承
# def test(self):
# print('from F')
pass
f1 = F()
f1.test() # 多继承 按照顺序找:对象自己>>类>>父类 (按照新式类优先查询)