面向对象编程(OOP)的三大特征,即:封装、继承、多态
Python里面的继承有单继承与多继承,格式如下:
# 派生类
class Derive(父类1, 父类2, ..., 父类n):
pass
单继承,示例:
class Animal:
def run(self):
print('Animal is running...')
class Dog(Animal):
def run(self):
print('Dog is running...')
多继承,示例:
class P1():
def talk(self):
print("我是p1")
class P2():
def talk(self):
print("我是p2")
class Person(P1, P2): # P1排在第一位,调用P1的talk()
pass
p = Person()
p.talk() # 输出结果:我是p1
注意:如果派生类有多个父类,多个父类都有相同的方法,方法调用时是按照继承参数的顺序来的,谁排在第一个就调用谁的方法
多态:即同一个接口根据访问的对象的不同而有不同的行为。继承时如果派生类的方法与基类同名,派生类的方法会覆盖基类的方法,由于这个特性才实现的多态,示例:
class Animal:
def run(self):
print('Animal is running...')
class Dog(Animal):
def run(self):
print('Dog is running...')
class Cat(Animal):
def run(self):
print('Cat is running...')
def run_twice(animal):
animal.run()
my_animal = Animal()
my_dog = Dog()
my_cat = Cat()
run_twice(my_animal) # 输出结果:Animal is running...
run_twice(my_dog) # 输出结果:Dog is running...
run_twice(my_cat) # 输出结果:Cat is running...
从输出结果可以看出来,
run_twice
函数里面调用的animal.run()
函数,根据输入对象的不同(实际分别传入的是my_animal, my_dog, my_cat
对象),分别有不同的输出结果。
多态存在的三个必要条件: