''' 什么是多态:由不同的类实例化得到的对象,调用同一个方法,执行的逻辑不同 多态:多态的概念指出了对象如何通过他们共同的属性和动作来操作及访问,而不需考虑他们具体的类。多态表明了动态(又名,运行时)绑定的存在,允许重载及运行时类型确定和验证 举例:水是一个类,不同温度,水被实例化成了不同的状态-->冰,水蒸气,雾(然而很多人就理解到这一步认为此乃多态,错,多态是运行时绑定的存在) 多态体现在由同一个类实例化出的多个对象,这些对象执行相同的方法时,执行的过程和结果是不一样的。 冰,水蒸气,雾,有一个共同的方法就是变成云,但是冰.变云()与水蒸气.变云()是截然不同的两个过程,虽然调用的方法都一样 ''' s = 'ssss' l = [1, 2, 3] print(len(s)) print(len(l)) print(s.__len__()) # 用点访问,相当于是调用对象的方法 print(l.__len__()) # 用点访问,相当于是调用对象的方法,这两个不同对象在调用同一个方法(一个是字符串一个是列表) class H2O: def __init__(self, name, temperature): self.name = name self.temperature = temperature def turn_ice(self): if self.temperature < 0: print('[%s]温度太低结冰了' % self.name) elif self.temperature > 0 and self.temperature < 100: print('[%s]温度刚好液化成水' % self.name) else: print('[%s]温度太高气化成了水蒸气' % self.name) class Water(H2O): pass class Ice(H2O): pass class Steam(H2O): pass w1 = Water('水', -20) # 实例化一个对象 i1 = Ice('冰', 30) # 实例化一个对象 s1 = Steam('水', 1000) # # 实例化一个对象 w1.turn_ice() i1.turn_ice() s1.turn_ice() # 这三个不同对象调用同一个方法,执行的过程和结果是不一样的;相当于s.__len__() def func(obj): obj.turn_ice() func(w1) func(i1) func(s1) # 相当于len(s) ''' 类的继承有两层意义:1.改变 2.扩展 多态就是类的这两层意义的一个具体的实现机制 即,调用不同的类实例化的对象下的相同的方法,实现的过程不一样 python中的标准类型就是多态概念的一个很好的示范 '''