多态
多态
什么是多态:
定义时的类型和运行时的类型不一样,也就是定义时并不确定要调用的是 哪个方法, 只有运行的时候才能确定调用的是哪个
多态特性
多态性是指在不考虑实例类型的情况下使用实例,
多态性分为静态多态性和动态多态性
动态多态性:如下
class H2O:
def __init__(self,name,temp):
self.name = name
self.temp = temp
def turn_ice(self):
if self.temp<0:
print("[%s]水结成冰咯"%self.name)
elif self.temp>=0 and self.temp<100:
print([%s]冰融化成水咯"%self.name)
elif self.temp>=100:
print("[%s]水蒸发咯"%self.name)
class Ice(H2O):
pass
class Water(H2O):
pass
class Steam(H2O):
pass
def turn_ice(obj):
obj.turn_ice()
ice = Ice("冰" ,-40)
water = Water("水" ,40)
steam = Steam("水蒸气" ,1000)
turn_ice(ice)
turn_ice(water)
turn_ice(steam)
为什么要用多态性?
①增加了程序的灵活性
以不变应万变,不论对象千变万化,使用者都是同一种形式去调用
②增加了程序可扩展性
通过继承animal类创建了一个新的类,使用者无需更改自己的代码, 还是用func(animal)去调用
class Animals:
def talk(self):
print("Animals run...")
lass Pig(Animals): # 属于动物的另外一种形态:猪
def talk(self):
print('Pig is huohuo')
class dog(Animals):
def talk(self):
print("dog is wangwang")
p = Pig()
d = dog()
# 统一接口,对于使用者来说,自己的代码根本无需改动
def func(obj):
obj.talk()
func(p) # 甚至连调用方式都无需改变,就能调用出pig的talk功能
func(d)
静态多态性:如任何类型都可以用运算符+进行运算
在编译(解释)之初就根据数据类型做自动匹配
运算符重载是指赋予内置运算符新的功能,
使内置运算符能适应更多的数据类型。当定义一个类的时候,
如果这个类 中重写了python基类object内置的有关运算符的特殊方法,那么该特殊方法对应的运 算符将 支持对该类的实例进行运算。
基类object中提供的一些特殊方法及其对应的运算符如表所示。
举例:
class Calculator(object):
def __init__(self, number): # 记录数值
self.number = number
def __add__(self, other): # 重载运算符+
self.number = self.number + other
return self.number
def __sub__(self, other):# 重载运算符-
self.number = self.number - other
return self.number
def __mul__(self, other): # 重载运算符*
self.number = self.number * other
return self.number
def __truediv__(self, other):# 重载运算符/
self.number = self.number / other
return self.number
calculator = Calculator(10)
print(calculator + 5)
print(calculator - 5)
print(calculator * 5)
print(calculator / 5)
执行结果如下: