文档章节

python 多态实例

黄哥Python培训
 黄哥Python培训
发布于 2015/07/21 15:45
字数 668
阅读 229
收藏 3

python 多态实例

# coding:utf-8
"""
多态(英语:Polymorphism),是指面向对象程序运行时,相同的消息可能会送给多个不同的类之对象,
而系统可依据对象所属类,引发对应类的方法,而有不同的行为。
简单来说,所谓多态意指相同的消息给予不同的对象会引发不同的动作称之。
在面向对象程序设计中,多态一般指子类型多态(Subtype polymorphism)。

上面的定义有点让初学者费解,黄哥用“打开”这个动作来描述面向对象的多态。
"打开",可以是打开门,打开窗户,打开书等等。"打开"这个动作,碰到不同的对象门,窗户,书,有不同的行为模式。
这个就是多态。
本文由黄哥python培训,黄哥所写
黄哥python远程视频培训班
https://github.com/pythonpeixun/article/blob/master/index.md

黄哥python培训试看视频播放地址
https://github.com/pythonpeixun/article/blob/master/python_shiping.md
"""
# 例1


class Door(object):

    def open(self):
        print "打开门"


class Windows(object):

    def open(self):
        print "打开窗户"


class Book(object):

    def open(self):
        print "打开书"

lst = [Door(), Windows(), Book()]

for item in lst:
    item.open()

# 例2 一般用继承来说明多态的例子


class Animal:

    def __init__(self, name):
        self.name = name

    def talk(self):
        raise NotImplementedError("Subclass must implement abstract method")


class Cat(Animal):

    def talk(self):
        return 'Meow!'


class Dog(Animal):

    def talk(self):
        return 'Woof! Woof!'

animals = [Cat('Missy'),
           Cat('Mr. Mistoffelees'),
           Dog('Lassie')]

for animal in animals:
    print animal.name + ': ' + animal.talk()

# 例3 python 内置有很多多态的应用
# 同样的 +号 可以用在不同的对象相加,体现(相仿:指相加这个事情)了多态的功能。
print 1 + 2
print "hello" + '黄哥'

# len 函数传不同的参数,也体现了多态的功能。
print len("黄哥python培训")
print len([2, 4, 5, 7])

# 工程应用
# 一个简单的日志记录函数,用判断实现的,重构为面向对象多态来实现。
#如果有大量的判断语句,就可以用多态来实现。


def log_msg(log_type):
    msg = 'Operation successful'
    if log_type == 'file':
        log_file.write(msg)
    elif log_type == 'database':
        cursor.execute('INSERT INTO log_table (MSG) VALUES ('?')', msg)

#重构


class FileLogger(object):

    def log(self, msg):
        log_file.write(msg)


class DbLogger(object):

    def log(self, msg):
        cursor.execute('INSERT INTO log_table (MSG) VALUES ('?')', msg)


def log_msg(obj):
    msg = 'Operation successful'
    obj.log(msg)


© 著作权归作者所有

黄哥Python培训
粉丝 39
博文 21
码字总数 14219
作品 0
海淀
私信 提问
Python是面向对象的语言吗?python编程

  Python虽然是解释型语言,但从设计之初就已经是一门面向对象的语言,对于Python来说一切皆为对象。正因为如此,在Python中创建一个类和对象是很容易的,当然如果习惯面向过程或者函数的写...

老男孩Linux培训
2018/06/08
8
0
Python - 进阶(持续更新 ing)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 https://blog.csdn.net/qq39437555/article/details/93867588 文章目录 Python - 面向对象 ...

桃子味儿的汽水~
08/23
0
0
D06——C语言基础学PYTHON

C语言基础学习PYTHON——基础学习D06 20180821内容纲要:  面向对象初级学习     1 面向对象     2 类       (1)封装       (2)继承       (3)多态    ...

m1racle
2018/08/22
0
0
python 面向对象编程之继承和多态

python学习笔记,特做记录,分享给大家,希望对大家有所帮助。 继承和多态 在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继...

展菲
07/04
0
0
给妹子讲python-S01E17函数的基本特征

今天开始,我们来讲讲函数,简而言之一个函数就是将一些语句集合在一起的部件,它们能够不止一次的在程序中运行。函数还能计算出一个返回值,并能够改变作为函数输入的参数,而这些参数在代码...

技术小能手
2018/09/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

shangcheng-my

1.数据库主键、外键类型为bigint,那么在后台应该用什么类型的变量定义? 后台用string接收,因为前段传过来的一般都是json字符串,后台直接接收,mysql是可以吧数字类型的字符串转换为对应的...

榴莲黑芝麻糊
昨天
4
0
微服务架构依赖图

基于spring-cloud-alibaba + dubbo

龙影
昨天
5
0
Centos7 安装zabbix-agent

rpm -i https://repo.zabbix.com/zabbix/4.2/rhel/6/x86_64/zabbix-release-4.2-2.el6.noarch.rpm 可以到https://repo.zabbix.com/zabbix找到对应的版本 yum install zabbix-agent -y 出现E......

abowu
昨天
8
0
文本编辑器GNU nano 4.4 发布

GNU nano 4.4 "Hagelslag" 更新日志: 启动时,光标可以放在第一个或最后一个出现位置 字符串前面带有+/string 或 +?string的字符串。 发生自动硬包装时((--breaklonglines),任何前导引号...

linuxCool
昨天
7
0
你知道字节序吗

字节序 最近在调一个自定义报文的接口时,本来以为挺简单的,发现踩了好几个坑,其中一个比较“刻骨铭心”的问题就是数据的字节序问题。 背景 自定义报文,调用接口,服务端报文解析失败 iO...

杭城小刘
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部