朋友们,如需转载请标明出处:https://blog.csdn.net/jiangjunshow
声明:在人工智能技术教学期间,不少学生向我提一些python相关的问题,所以为了让同学们掌握更多扩展知识更好地理解AI技术,我让助理负责分享这套python系列教程,希望能帮到大家!由于这套python教程不是由我所写(有时候有空也会参与编写),所以不如我的人工智能教程风趣幽默,学起来比较枯燥;但它的知识点还是讲到位的了,也值得阅读!想要学习AI技术的同学可以看我的人工智能教程https://blog.csdn.net/jiangjunshow/article/details/77338485。PS:看不懂本篇文章的同学请先看前面的文章,循序渐进每天学一点就不会觉得难了!
多态很重要也很玄妙!什么是多态呢?
先给大家来一段传统的官方的解释。大概率你是看不懂的,要有心理准备。“多态(Polymorphism)是面向对象编程的核心特性之一,指同一接口或方法在不同对象中表现出不同行为的能力。其核心思想是通过统一的抽象层屏蔽具体实现差异,从而提升代码的灵活性和可扩展性 。”
上面的看不懂没关系。下面我用我的方式来让你懂!
老规矩,我们不说那些抽象的概念,直接用简单的实例代码来给你解释。
下面代码定义了三个类。Animal是父类,Dog和Cat是子类,它俩都从Animal那里继承了speak方法,但是两个子类又都重写了这个方法。Dog的speak被重写成输出“Woof”,因为狗狗的叫声是汪汪,而Cat的speak输出的是“Meow”,因为猫是喵喵叫的。
class Animal:
def speak(self):
raise NotImplementedError("Subclasses must implement this")
class Dog(Animal):
def speak(self):
return "Woof!"
class Cat(Animal):
def speak(self):
return "Meow!"
下面我们再定义一个函数,这个函数的作用是输出动物的声音。
def animal_sound(animal: Animal):
print(animal.speak())
虽然这个函数只有一行固定的代码animal.speak(),但是,如果我们使用多态技术,就可以让这一行代码输出不同的声音,例如可以输出狗的声音,也可以输出猫的声音。下面的代码就是利用多态性来实现这一目标。
# 使用多态
dog = Dog()
cat = Cat()
animal_sound(dog) # 输出: Woof!
animal_sound(cat) # 输出: Meow!
同样的代码animal.speak(),却有不同的行为。这就是多态,一套代码有多种形态。当传入的是Dog时,输出的就是狗叫,当传入的是Cat对象时,输出的就是猫叫喵喵Meow。同理,如果你后面再定义一个牛的类,把牛的对象传入,那么animal.speak()输出的就是牛叫。这就是前面那句抽象的话的具体实例——“同一接口或方法在不同对象中表现出不同行为”。
最后抛出一个问题供大家思考讨论——如果后面我们再定义一个女优的类,把女优的对象传入animal.speak(),那么会输出女优的叫声吗?有基础的同学可能会说不行,因为女优不是动物,没有继承动物的speak方法。这个说法也对也不对——对于一些语言来说多态必须要通过继承来实现,但是对于Python语言来说,没有继承关系也可以实现多态,具体是怎么回事呢,下篇文章给大家揭晓!
麻烦随手帮我点个不要钱的赞,谢谢!