zoukankan      html  css  js  c++  java
  • [py]多态的理解

    多态
    不同的数据类型,执行相同的方法,产生的状态不同

    不同对象调用相同的方法(运行时候的绑定状态)

    #!/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)
    
  • 相关阅读:
    GO语言面向对象06---面向对象练习01
    GO语言面向对象05---接口的多态
    GO语言面向对象04---接口的继承
    GO语言面向对象03---接口与断言
    GO语言面向对象02---继承
    Go语言练习---判断闰年以及根据现在的秒数求现在的年月日
    [操作系统] 线程管理
    [操作系统] 进程的状态
    [操作系统] 进程控制块
    关于这次计算机设计大赛
  • 原文地址:https://www.cnblogs.com/iiiiiher/p/8654436.html
Copyright © 2011-2022 走看看