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) 本文由用戶 LasonyaHart 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!