python 多态实例

本文通过实例介绍了Python中的多态性概念,包括类的创建和继承,以及内置操作符和函数如何体现多态。通过具体的代码示例展示了如何使用多态进行对象交互,如开门、开窗、看书等。此外,还讨论了如何利用多态重构日志记录功能,以提高代码的灵活性和可维护性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

# 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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值