Python面向对象——多态

多态:

什么是多态?多态就是一种事物有多种形态,比如说动物,有 猫、狗、老鼠、狮子、大象等。

多态的好处:比如我们在新创建类时我们可以继承动物类,动物类中的方法可以重写,也可以不重写,当我们新增时,只是新增一个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就是我们重写的方法。

这就是多态。

猜你喜欢

转载自blog.csdn.net/qq_37235798/article/details/81323632