多态

2020-03-15  本文已影响0人  三米板

Python基础教程

说到多态,我们在别的高级语言中一般会先想到的是接口,或者协议,像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()方法),只要变量中存在此方法,就可以当成一个实现此方法的对象去使用。

方法抽象

实现

上一篇下一篇

猜你喜欢

热点阅读