1、面向对象三大特征
面向对象编程的三大特征:封装,继承,多态
封装:客观的事物封装成类(将数据和方法放在一个类中就构成了封装)。
继承:python中一个类可以继承于一个类也可以继承多个类,被继承的类叫父类(或者叫基类,base class),继承的类叫子类。
多态(Polymorphism):指的是一类事物有多种形态,一个抽象类有多个子类(因而多态的概念依赖于继承),不同的子类对象 调用相同的 方法,产生不同的执行结果,多态可以增加代码的灵活度
2、多态
实现多态的步骤:
1、定义一个父类(Base),实现某个方法(比如:run)
2、 定义多个子类,在子类中重写父类的方法(run),每个子类run方法实现不同的功能
3、假设我们定义了一个函数,需要一个Base类型的对象的参数,那么调用函数函数的时
候,传入Base类不同的子类对象,那么这个函数就会执行不同的功能,这就是多态的体现
class Animal(object):
"""动物类"""
def func(self):
print('动物发出了声音')
class Cat(Animal):
"""猫类"""
def func(self):
print('喵 喵 喵')
class Dog(Animal):
"""狗类"""
def func(self):
print('汪 汪 汪 ')
class Hero:
def func(self):
print('这个是英雄类的方法,不是动物类的对象')
def work01(ani:Animal):
ani.func()
work01(Animal()) # 动物发出了声音
work01(Cat()) # 喵 喵 喵
work01(Dog()) # 汪 汪 汪
# 注意点: Python中函数的参数是没有类型限制的,所有多态在python中的体现并不是很严谨,此处会标黄,但还是可以执行
work01(Hero()) # 这个是英雄类的方法,不是动物类的对象
# 报错:AttributeError: 'People' object has no attribute 'func'
work01(People())
动物发出了声音
喵 喵 喵
汪 汪 汪
这个是英雄类的方法,不是动物类的对象
注意点: Python中函数的参数是没有类型限制的,所有多态在python中的体现并不是很严谨。多
态的概念是应用于Java和C#这一类强类型语言中,而Python崇尚“鸭子类型”
3、鸭子类型
鸭子类型概念:它并不要求严格的继承体系,关注的不是对象的类型,而是它是否具有要调用的方
法(行为)