typhoonpython 2019-12-31
多态指的是一类事物有多种形态
python:a 可以接受任意数据类型,对象 默认支持多态。
def func(a):
pass动物有多种形态:人,狗,猪
import abc
class Animal(metaclass=abc.ABCMeta): #同一类事物:动物
@abc.abstractmethod
def talk(self):
pass
class People(Animal): #动物的形态之一:人
def talk(self):
print(‘say hello‘)
class Dog(Animal): #动物的形态之二:狗
def talk(self):
print(‘say wangwang‘)
class Pig(Animal): #动物的形态之三:猪
def talk(self):
print(‘say aoao‘)多态性
什么是多态动态绑定(在继承的背景下使用时,有时也称为多态性)
多态性是指在不考虑实例类型的情况下使用实例
class Payment:
def pay(self):pass
class QQpay(Payment):
def pay(self, money):
print(‘使用qq支付了%s元‘%money)
class Wechatpay(Payment):
def pay(self, money):
print(‘使用微信支付了%s元‘%money)
def pay(pay_obj,money): # 统一支付方法
‘‘‘
:param pay_obj: 实例化对象
:param money: 金钱
:return: 使用xx支付了xx元
‘‘‘
pay_obj.pay(money) # 执行实例化对象的类方法pay
qq = QQpay()
we = Wechatpay()
pay(qq, 100)
pay(we, 200)
‘‘‘
执行输出:
使用qq支付了100元
使用微信支付了200元
‘‘‘通过执行pay函数,传入不同的参数返回不同的结果,这就是多态
一种接口,多种实现
上面的例子是面向过程的函数加面向对象,实现的。整形效果不好,把函数放到父类里面
class Payment:
@staticmethod
def pay(pay_obj,money): # 静态方法.需要通过类名+方法名来调用这个方法
pay_obj.pay(money)
class QQpay(Payment):
def pay(self, money):
print(‘使用qq支付了%s元‘%money)
class Wechatpay(Payment):
def pay(self, money):
print(‘使用微信支付了%s元‘%money)
qq = QQpay()
we = Wechatpay()
Payment.pay(qq, 100)
Payment.pay(we, 200)
‘‘‘
执行输出:
使用qq支付了100元
使用微信支付了200元
‘‘‘无论是python的2.*还是3.* : 天生自带多态效果
多态通过继承实现
在python中不需要刻意实现多态,因为python本身自带多态效果