1. 程式人生 > >[py]多態的理解

[py]多態的理解

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]多態的理解