【一】多态
【1】什么是多态
- 多态指的是一类事物有多种形态
【2】示例
#动物有多种形态:人、狗、猪等
import abc
# 总的类:动物
class Animal(metaclass=abc.ABCMeta):
@abc.abstractmethod
def talk(self):
pass
# 动物的一类:人
class People(Animal):
def talk(self):
print('人会说话')
# 动物的一类:狗
class Dog(Animal):
def talk(self):
print('汪汪汪')
# 动物的一类:猪
class Pig(Animal):
def talk(self):
print('哼唧哼唧')
【二】多态性
【1】什么是多态性
- 多态动态绑定在继承的背景下使用时,有时也称为多态性
- 多态性是指事务的多种形态的性质
- 在面向对象中一般这样表述多态性:
- 向不同的对象发送同一条消息
- 不同的对象在接收时会产生不同的行为
- 也就是说,每个对象可以用自己的方式去响应共同的消息
- 所谓消息,就是调用函数,不同的行为就是指不同的实现,即执行不同的函数
【2】多态性的分类
(1)静态多态性
- 如任何类型都可以用运算符 + 进行运算
(2)动态多态性
import abc
# 总的类:动物
class Animal(metaclass=abc.ABCMeta):
@abc.abstractmethod
def talk(self):
pass
# 动物的一类:人
class People(Animal):
def talk(self):
print('人会说话')
# 动物的一类:狗
class Dog(Animal):
def talk(self):
print('汪汪汪')
# 动物的一类:猪
class Pig(Animal):
def talk(self):
print('哼唧哼唧')
people = People()
dog = Dog()
pig = Pig()
# 不用考虑它们具体是什么类型,可以直接使用
people.talk()
dog.talk()
pig.talk()
# 也可以定义一个统一的接口来使用
def func(obj):
obj.talk()
func(people)
func(dog)
func(pig)
【3】多态性的好处
- 增加了程序的灵活性
- 增强了代码的可读性和可扩展性
【三】鸭子类型
- 如果看起来像、叫声像而且走起路来像鸭子,那么它就是鸭子
- 但其实我们完全可以不依赖于继承,只需要制造出外观和行为相同对象,同样可以实现不考虑对象类型而使用对象
- 鸭子类型是一种编程风格,决定一个对象是否有正确的接口
# 狗和鸭子都可以叫,可以喝水,所以狗就可以当成鸭子去用
class Dog():
def talk(self):
print(f"可以叫")
def dink(self):
print(f'可以喝水')
class Duck():
def talk(self):
print(f"可以叫")
def dink(self):
print(f'可以喝水')
标签:进阶,Python,多态性,self,多态,talk,print,class,def
From: https://www.cnblogs.com/ligo6/p/18183500