[python]**
# coding:utf-8
多型(英語:polymorphism),是指物件導向程式執行時,相同的訊息可能會送給多個不同的類之物件,
而系統可依據物件所屬類,引發對應類的方法,而有不同的行為。
簡單來說,所謂多型意指相同的訊息給予不同的物件會引發不同的動作稱之。
在物件導向程式設計中,多型一般指子型別多型(subtype polymorphism)。
上面的定義有點讓初學者費解,黃哥用「開啟」這個動作來描述物件導向的多型。
"開啟",可以是開啟門,開啟窗戶,開啟書等等。"開啟"這個動作,碰到不同的物件門,窗戶,書,有不同的行為模式。
這個就是多型。
本文由黃哥python培訓,黃哥所寫
# 例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 多型例項
coding utf 8 多型 英語 polymorphism 是指物件導向程式執行時,相同的訊息可能會送給多個不同的類之物件,而系統可依據物件所屬類,引發對應類的方法,而有不同的行為。簡單來說,所謂多型意指相同的訊息給予不同的物件會引發不同的動作稱之。在物件導向程式設計中,多型一般指子型別多型 s...
多型應用例項
主機板,主機板可以插入網絡卡。直接描述主機板以及網絡卡,並在主機板中使用該網絡卡,這樣的設計雖然當然可以應用,但缺少擴充套件性。比如又來乙個音效卡該如何呢?難道要修改主機板不成?找這些事物的共性。主機板是為了擴充套件自己的功能,而是提高後期的可維護性。先對這些板卡的共性進行抽取。定義乙個規則,這個規...
python 物件導向介紹之多型例項
一.多型 一種介面,多種實現。多型性 polymorphisn 是允許你將父物件設定成為和乙個或更多的他的子物件相等的技術,賦值之後,父物件就可以根據當前賦值給它的子物件的特性以不同的方式運作。簡單的說,就是一句話 允許將子類型別的指標賦值給父類型別的指標。那麼,多型的作用是什麼呢?我們知道,封裝可...