多态
2020-03-15 本文已影响0人
三米板
说到多态,我们在别的高级语言中一般会先想到的是接口,或者协议,像java,php中的interface,像oc中的@protocol等,但是在python中,没有明确定义这个概念。我们如何来实现多态呢?
python中引入一个概念叫做“鸭子类型”
何为鸭子类型呢?我们用人话做一个定义
定义
先看一段代码吧:
class Car:
def __init__(self):
pass
def run(self):
pass
class Audi(Car):
def __init__(self):
super().__init__()
def run(self):
print("Audi run")
class Benz(Car):
def run(self):
print("Benz run")
class Bycecle:
def __init__(self):
pass
def run(self):
print("bycecle run")
def lookRun(car):
car.run()
audi = Audi()
benz = Benz()
bike = Bycecle()
lookRun(audi)
lookRun(benz)
lookRun(bike)
举例,假如我们在java中我们会怎么写?
我们可能会有以下的实现:
public interface Vehicle{
public void run();
}
public Audi implement Vehicle{
public void run{
System.out.println("audi run");
}
}
在python中,没有接口的概念,也没有抽象类的概念。
python中的鸭子类型允许我们使用任何提供所需方法的对象,而不需要迫使它成为一个子类。
因为python的参数是不带变量类型的,而变量的类型是由编译器去推断的,变量的类型取决于所关联的对象,只要变量中有这个方法,那么在调用处去调用此方法(这里是run()方法),只要变量中存在此方法,就可以当成一个实现此方法的对象去使用。