多态:
什么是多态?多态就是一种事物有多种形态,比如说动物,有 猫、狗、老鼠、狮子、大象等。
多态的好处:比如我们在新创建类时我们可以继承动物类,动物类中的方法可以重写,也可以不重写,当我们新增时,只是新增一个animals类而不需要再去修改父类代码里的内容,只需要调用就可以了。
多态的最基本的实现就是通过继承来实现的。
首先我们先创建一个动物类。动物有名字,会吃,会叫。
class Animals(object):
def __init__(self,name):
self.name=name
def eat(self):
print(self.name,'eat')
def say(self):
print(self.name,'say:~~')
这个时候我们就创造了一个animals类其中有属性name,还有吃,和叫。
之后用到我们上次讲到的继承。
创建一个cat类。
from animals import Animals
class Cat(Animals):
def __init__(self,name):
Animals.__init__(self,name)
def say(self):
print(self.name,'say:miao~miao~')
这个时候我们继承animals类,传入参数name,在__init__(self,name)这个方法之后,我们的Cat类就会自动创建继承来自父类的方法:eat 和say,属性:name,在多态中我们可以不重写父类的方法,直接继承,也可以自己重写方法,在调用的时候会调用子类中重写的方法。
同样的道理,我们创建一个Dog类。
from animals import Animals
class Dog(Animals):
def __init__(self,name):
Animals.__init__(self,name)
def say(self):
print(self.name,'say:wang~wang~')
同样是重写say方法。这个时候我们可以在创建一个.py文件来测试一下我们创建属性后调用的方法都是什么。
from cat import Cat
from dog import Dog
cat=Cat("tom")
dog=Dog("xiaobai")
cat.say()
dog.say()
cat.eat()
dog.eat()
给cat实例化一个对象叫做:tom,给dog实例化一个对象叫做:xiaobai
分别调用say和eat方法。结果显示:
这个时候我们可以看到在父类animals中定义的say为 say:~~ 但是在字类中重写方法之后再调用就会输出子类中重写的方法。
这个就体验出了多态的灵活性,可以再子类中重写方法,但是对其他并不影响。
如果还是不太明白的话,我们可以再创建一个狮子类:
from animals import Animals
class Lion(Animals):
def __init__(self,name):
Animals.__init__(self,name)
def eat(self):
print(self.name,'self find food to eat')
在狮子类中,我们重写eat方法让它自己找食物吃,然后再主函数中进行实例化对象叫:tiger再让它say和eat的时候,调用的say是父类中的say,但是eat就是我们重写的方法。
这就是多态。