码迷,mamicode.com
首页 > 编程语言 > 详细

Python面向对象 | 多态

时间:2019-12-31 14:21:19      阅读:105      评论:0      收藏:0      [点我收藏+]

标签:实例   多态性   参数   微信   mon   hello   payment   dog   继承   

 

、多态

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

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面向对象 | 多态

标签:实例   多态性   参数   微信   mon   hello   payment   dog   继承   

原文地址:https://www.cnblogs.com/Summer-skr--blog/p/11801408.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!