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本身自带多态效果