[py]多態的理解
阿新 • • 發佈:2018-03-27
mar Coding utf-8 ini func print pytho elif list
多態
不同的數據類型,執行相同的方法,產生的狀態不同
不同對象調用相同的方法(運行時候的綁定狀態)
#!/usr/bin/env python # coding=utf-8 class H2O: def __init__(self, name, temp): self.name = name self.temp = temp def show(self): if self.temp < 0: print("%s 溫度為: %s" % (self.name, self.temp)) elif 0 < self.temp < 100: print("%s 溫度為: %s" % (self.name, self.temp)) elif self.temp > 100: print("%s 溫度為: %s" % (self.name, self.temp)) class Ice(H2O): pass class Water(H2O): pass class Stream(H2O): pass w1 = Ice("冰", -10) w2 = Water("水", 25) w3 = Stream("氣", 102) w1.show() w2.show() w3.show()
系統的多態體現
str和list都是type類,有共同的父類,都是執行父類的方法,只不過執行時候狀態不同.
>>> s="abc"
>>> l=[1,2,3]
>>> s.__len__()
3
>>> l.__len__()
3
>>>
>>> len(l) ## 調用__len__方法
3
>>>
模仿系統len()
#!/usr/bin/env python # coding=utf-8 class H2O: def __init__(self, name, temp): self.name = name self.temp = temp def show(self): if self.temp < 0: print("%s 溫度為: %s" % (self.name, self.temp)) elif 0 < self.temp < 100: print("%s 溫度為: %s" % (self.name, self.temp)) elif self.temp > 100: print("%s 溫度為: %s" % (self.name, self.temp)) class Ice(H2O): pass class Water(H2O): pass class Stream(H2O): pass w1 = Ice("冰", -10) w2 = Water("水", 25) w3 = Stream("氣", 102) ## 方法1 w1.show() w2.show() w3.show() ## 方法2: 提供統一api, 類似len(l) def func(obj): obj.show() func(w1) func(w2) func(w3)
[py]多態的理解