多态:参数类型用基类声明,执行的时候会根据传入的对象(同名方法)去执行相应的方法,具有不同的效果。
即同一个函数,传不同的类(父类、子类)。
看两个例子就比较容易理解了
例1:
class F1:
pass
class S1(F1):
def show(self):
print ('S1.show')
class S2(F1):
def show(self):
print ('S2.show')
def func(obj):
"""func函数需要接收一个F1类型或者F1子类的类型"""
obj.show()
s1_obj = S1()
func(s1_obj) # 在func函数中传入S1类的对象 #s1_obj,执行 S1 的show方法,结果:#S1.show
s2_obj = S2()
func(s2_obj) # 在func函数中传入S2类的对象 #s2_obj,执行 S2 的show方法,结果:#S2.show
例2:
class calculator:
def count(self,args):
return 1
calc=calculator()
#自定义类型
obj_list = ['hello,world',[1,2,3],calc]
for obj in obj_list:
print(obj)
print(type(obj))
print(obj.count('a')) #方法多态