1.什么是多态:同一事物有多种形态
# class Animal:
# pass
#
# class People(Animal):
# pass
#
# class Dog(Animal):
# pass
#
# class Pig(Animal):
# pass
2.为何要有多态=》多态会带来什么样的特性,多态性
# 多态性指的是可以在不考虑对象具体类型的情况下而直接使用对象
class Animal: # 统一所有子类的方法
def say(self):
print('动物基本的发声频率。。。',end=' ')
class People(Animal):
def say(self):
super().say()
print('嘤嘤嘤嘤嘤嘤嘤')
class Dog(Animal):
def say(self):
super().say()
print('汪汪汪')
class Pig(Animal):
def say(self):
super().say()
print('哼哼哼')
obj1=People()
obj2=Dog()
obj3=Pig()
obj1.say()
obj2.say()
obj3.say()
动物基本的发声频率。。。 嘤嘤嘤嘤嘤嘤嘤
动物基本的发声频率。。。 汪汪汪
动物基本的发声频率。。。 哼哼哼
# 定义统一的接口,接收传入的动物对象
def animal_say(animal):
animal.say()
animal_say(obj1)
animal_say(obj2)
animal_say(obj3)
3.鸭子类型
- 完全可以不依赖于继承,只需要制造出外观和行为相同对象,同样可以实现不考虑对象类型而使用对象
- Python崇尚的“鸭子类型”
# class Cpu:
# def read(self):
# print('cpu read')
#
# def write(self):
# print('cpu write')
#
# class Mem:
# def read(self):
# print('mem read')
#
# def write(self):
# print('mem write')
#
#
# class Txt:
# def read(self):
# print('txt read')
#
# def write(self):
# print('txt write')
# 了解:
import abc
class Animal(metaclass=abc.ABCMeta): # 统一所有子类的标准
@abc.abstractmethod
def say(self):
pass
# obj=Animal() # 不能实例化抽象类自己
class People(Animal):
def say(self):
pass
class Dog(Animal):
def say(self):
pass
class Pig(Animal):
def say(self):
pass
#
obj1=People()
obj2=Dog()
obj3=Pig()