Python多态实例详解编程语言

[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)

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/8114.html

(0)
上一篇 2021年7月18日
下一篇 2021年7月18日

相关推荐

发表回复

登录后才能评论