Python面向对象 | 多态

Posted summer-skr--blog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python面向对象 | 多态相关的知识,希望对你有一定的参考价值。

 

、多态

多态指的是一类事物有多种形态

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

以上是关于Python面向对象 | 多态的主要内容,如果未能解决你的问题,请参考以下文章

Python面向对象之:三大特性:继承,封装,多态。

19.Python面向对象之:三大特性:继承,封装,多态。

Python3-2020-测试开发-20- 面向对象之封装,继承,多态

Python-面向对象(组合封装与多态)

Python基础:面向对象-继承和多态

继承 多态 封装 Python面向对象的三大特性