文档章节

面向对象的多态、多态性

o
 osc_a22drz29
发布于 2019/03/27 16:47
字数 593
阅读 6
收藏 0

精选30+云产品,助力企业轻松上云!>>>

多态

       多态指的是一类事物有多种形态,比如水有多种形态:冰、水、水蒸气,但都是H2O,下面定义一个H2O的父类和三种形态的子类:

class H2O:
    def __init__(self,name,temperature):
        self.name = name
        self.temperature = temperature

    def turn(self):
        if self.temperature <= 0:
            print('温度太低,变成%s了'%self.name)
        elif self.temperature >0 and self.temperature <100:
            print('温度适中,变成%s了'%self.name)
        else:
            print('温度太高变成%s了'%self.name)

class Ice(H2O):
    pass

class Water(H2O):
    pass

class Air(H2O):
    pass

多态性

        多态性就是在不考虑实例类型的情况下使用实例,举个例子,我们之前学过的一个内置函数len(),可以用于字符串,也可以用于列表和元组:

s=str('cjeowjo')
l=list([1,2,3])
t=tuple((4,5,6))

#我们可以在不考虑三者类型的前提下使用s,l,t
s.__len__()
l.__len__()
t.__len__()

#其实我们都是这样用的
len(s)
len(l)
len(t)

       其实字符串、列表和元组,是三个子类,他们有共同的父类type,实例化之后都可以调用父类的__len__()这个属性,但是定义一个len()函数后,使用就更灵活了。现在回到之前水的例子:

class H2O:
    def __init__(self,name,temperature):
        self.name = name
        self.temperature = temperature

    def turn(self):
        if self.temperature <= 0:
            print('温度太低,变成%s了'%self.name)
        elif self.temperature >0 and self.temperature <100:
            print('温度适中,变成%s了'%self.name)
        else:
            print('温度太高变成%s了'%self.name)

class Ice(H2O):
    pass

class Water(H2O):
    pass

class Air(H2O):
    pass

i1 = Ice('',-10)
w2 = Water('',20)
a1 = Air('水蒸气',120)

i1.turn()
w2.turn()
a1.turn()
>>>温度太低,变成冰了
>>>温度适中,变成水了
>>>温度太高变成水蒸气了

def func(obj):
    obj.turn()

func(i1)
func(w2)
func(a1)

>>>温度太低,变成冰了
>>>温度适中,变成水了
>>>温度太高变成水蒸气了

       结果是一样的,这个时候再多一种水的其他类,也可以直接用func函数了(当然,目前水就这三种形态,只是假设),可见多态的好处在于:

1.增加了程序的灵活性

  以不变应万变,不论对象千变万化,使用者都是同一种形式去调用,如func(obj)

2.增加了程序额可扩展性

  通过继承animal类创建了一个新的类,使用者无需更改自己的代码,还是用func(obj)去调用 

 

      

      

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
Python面向过程和面向对象基础

总结一下: 面向过程编程:根据业务逻辑从上到下的写代码-----就是一个project写到底,重复利用性比较差 函数式:将某些特定功能代码封装到函数中------方便日后调用 面向对象:对函数进行分...

osc_8242avx7
2018/05/17
1
0
什么是c++中的多态

什么是c++中的多态 引言 多态(Polymorphism)、封装(Encapsulation)和继承(Inheritance)是面向对象思想的“三大特征”,此处俗称“面向对象的三板斧”,而多态是三板斧中最厉害的杀招,...

青灯夜
2015/09/01
23
0
第二章 JavaSE 基础

一、 Java 面向对象 面向对象都有哪些特性以及你对这些特性的理解 1) 继承:继承是从已有类得到继承信息创建新类的过程。提供继承信息的类被称为父类(超类、基类);得到继承信息的类被称为...

蘑菇鸡蛋
2018/10/15
0
0
面向对象的特征有哪些方面

1、面向对象的特征有哪些方面? 抽象:抽象是将一类对象的共同特征总结出来构造类的过程 包括数据抽象和行为抽象两方面 抽象只关注对象有哪些属性和行为,并不关注这些行为的细节是什么 继承...

职业搬砖20年
2018/07/09
22
0
C++-怎样写程序(面向对象)

  使用编程语言写好程序是有技巧的。   主要编程技术:   1. 编程风格   2. 算法   3. 数据结构   4. 设计模式   5. 开发方法   编程风格指的是编程的细节,比如变量名...

osc_57loaj8m
2018/12/20
1
0

没有更多内容

加载失败,请刷新页面

加载更多

等到所有jQuery Ajax请求都完成了吗? - Wait until all jQuery Ajax requests are done?

问题: How do I make a function wait until all jQuery Ajax requests are done inside another function? 我如何让一个函数等到所有jQuery Ajax请求都在另一个函数中完成之后? In short...

富含淀粉
7分钟前
0
0
OSChina 周日乱弹 —— 那么长的绳子,你这是放风筝呢

Osc乱弹歌单(2020)请戳(这里) 【今日歌曲】 @ 巴拉迪维:黑豹乐队的单曲《无地自容》 耳畔突然响起旋律,是那首老歌。中国摇滚有了《一无所有》不再一无所有;中国摇滚有了《无地自容》不...

小小编辑
今天
65
1
《吐血整理》-顶级程序员书单集

你知道的越多,你不知道的越多 给岁月以文明,而不是给文明以岁月 前言 王潇:格局决定了一个人的梦想,梦想反过来决定行为。 那格局是什么呢? 格局是你能够看见的深度、广度和密度。 王潇认...

敖丙
2019/12/11
11
0
我可以在Android版式中加下划线吗? - Can I underline text in an Android layout?

问题: 如何在Android布局xml文件中定义带下划线的文本? 解决方案: 参考一: https://stackoom.com/question/A31z/我可以在Android版式中加下划线吗 参考二: https://oldbug.net/q/A31z/...

法国红酒甜
今天
26
0
干掉ELK | 使用Prometheus+Grafana搭建监控平台

什么是Prometheus? Prometheus是由SoundCloud开发的开源监控报警系统和时序列数据库(TSDB)。Prometheus使用Go语言开发,是Google BorgMon监控系统的开源版本。 Prometheus的特点 · 多维度...

木九天
今天
34
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部