一、多态
多态指的是一类事物有多种形态,(一个抽象类有多个子类,因而多态的概念依赖于继承)
-
序列数据类型有多种形态:字符串,列表,元组
-
动物有多种形态:人,狗,猪
2.多态的目的:
“多态” 也称之为 “多态性”,目的是为了 在不知道对象具体类型的情况下,统一对象调用方法的规范(比如:名字)。
多态的表现 “形式之一” 就是继承:
- 先抽象,再继承
父类: 定制一套统一的规范。(比如: 方法名统一)
子类: 遵循父类的统一的规范。(比如: 子类遵循父类方法名的统一)
注意: 在python中不会强制限制 子类 必须要遵循 父类 的规范,所以出现了抽象类。
动物的多种形态
# 动物类 class Animal: # 方法 吃 def eat(self): pass # 方法 叫 def speak(self): pass # 猪类 class Pig(Animal): def eat(self): print('bia唧...') def speak(self): print('哼哼哼...') # 猫类 class Cat(Animal): def eat(self): print('咬ji 咬ji....') def speak(self): print('喵喵喵...') # 狗类 class Dog(Animal): def eat(self): print('舔 ji 舔ji...') def speak(self): print('汪汪汪...') animal1 = Dog() animal2 = Pig() animal3 = Cat() # 让动物们叫起来 animal1.speak() animal2.speak() animal3.speak()
抽象类
1.什么是抽象类?
在python内置的abc模块中,有一个抽象类。
2.抽象类的作用:
让子类必须遵循父类的编写规范。
3.如何实现抽象类
- 父类需要继承abc模块中,metaclass=abc.ABCMeta
- 在父类的方法中,需要装饰上 abc.abstractmethod
注意: 在python中不推荐使用抽象类。
注意: 子类必须按照父类的方法编写规范,缺一不可。(只要父类中有几个抽象方法,子类就必须要定义几个)
import abc # 父类 class Animal(metaclass=abc.ABCMeta): # 方法 吃 @abc.abstractmethod def eat(self): pass # 方法 叫 @abc.abstractmethod def speak(self): pass # 猪类 class Pig(Animal): def run(self): pass def eat(self): print('bia唧...') def speak(self): print('哼哼哼...') print(Pig.__dict__) print(Animal.__dict__) pig_obj = Pig()