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