Python 编程基础 | 第五章-类 | 5.7、封装、继承与多态

一、封装、继承与多态

面向对象编程(OOP)的三大特征,即:封装、继承、多态

1、封装

2、继承

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

注意:如果派生类有多个父类,多个父类都有相同的方法,方法调用时是按照继承参数的顺序来的,谁排在第一个就调用谁的方法

3、多态

多态:即同一个接口根据访问的对象的不同而有不同的行为。继承时如果派生类的方法与基类同名,派生类的方法会覆盖基类的方法,由于这个特性才实现的多态,示例:

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对象),分别有不同的输出结果。

多态存在的三个必要条件:

  • 有继承
  • 有重写,即:派生类重写基类的同名方法
  • 父类引用指向子类对象

你可能感兴趣的:(Python,编程基础,python,开发语言)