多态:一个接口多种实现。在继承的子类中对父类的方法进行了重写,随之产生了继承的一个好处就是多态,也就是同一事物表现出了多种形态。其实多态就是抽象化的过程,把一些具体事物的共同点抽象出来,在通过这个抽象的事物与具体的事物 进行对话
class Car(object):
def run(self):
print("car is running...")
class Toyota(Car):
def run(self):
print("toyota is running...")
class Benci(Car):
def run(self):
print("benci is running...")
这样就可以写一个接口,来调用不同类的run方法了
def func(obj):
obj.run()
func(Toyota())
func(Benci())
如果还想在从Car类中派生一个Dazhong的子类,同样可以用这个func接口
class Dazhong(Car):
def run(self):
print("Dazhong is running...")
func(Dazhong())
对于Dazhong()、Baoma()、Toyota()这样的变量,只要知道他是Car类型(可以用isinstance(Dazhong(),Car)),而无需关注他的子类型
其实只要定义的类中有这个run方法,就可以使用func这个接口,这就是作为动态语言的鸭子类型,不要求有严格的继承体系,一个对象只要“看起来像鸭子,走起路来像鸭子,那么它就可以认为是鸭子类型”
class Test(object):
def run(self):
print(“test is running…”)
func(Test())
总结:
多态有两种类型:
1.对象根据输入参数提供方法的不同实现(以上举的例子)
2.不同类型的对象可以使用相同的接口(比如python的内置功能,字符串,元组,列表都可以通过整数索引来访问。例:“asd”[0],(1,2,3)[0],[1,2,3][0])