我们看到的事物有圆形或者方形之分,这就是事物存在的不同形态,放在我们python中的多态同样适用。有些小伙伴们看到多态中既有区别又有联系,这是因为类继承所带来的好处。多态作为类的三个特性之一,使用时不免会跟其他的特性有所联系。下面我们就python面向对象中多态的使用前提进行探索,开始之间先来简单了解下多态。
多态指的是一类事物有多种形态。
动物有多种形态:人,狗,猪
importabc
classAnimal(metaclass=abc.ABCMeta):#同一类事物:动物
@abc.abstractmethod
deftalk(self):
pass
classPeople(Animal):#动物的形态之一:人
deftalk(self):
print('sayhello')
classDog(Animal):#动物的形态之二:狗
deftalk(self):
print('saywangwang')
classPig(Animal):#动物的形态之三:猪
deftalk(self):
print('sayaoao')
classDog(object):
def__init__(self,name):
self.name=name
defgame(self):
print("%s蹦蹦跳跳的玩耍..."%self.name)
classXiaoTianDog(Dog):
defgame(self):
print("%s飞到天上去玩耍..."%self.name)
:继承、重写。
classPerson(object):
def__init__(self,name):
self.name=name
defgame_with_dog(self,dog):
print("%s和%s快乐的玩耍..."%(self.name,dog.name))
dog.game()
game 方法是在 Dog 父类中定义的,Person 类中只需要让狗对象调用 game 方法,而不关心具体是什么狗。
#1.创建一个狗对象
#wangcai=Dog("旺财")
wangcai=XiaoTianDog("飞天旺财")
#2.创建一个小明对象
xiaoming=Person("小明")
#3.让小明调用和狗玩的方法
xiaoming.game_with_dog(wangcai)
#小明和飞天旺财快乐的玩耍...
#飞天旺财飞到天上去玩耍...
在程序执行时,传入不同的狗对象实参,就会产生不同的执行效果。
类的多态特性,必须满足以下 2 个前提条件:
继承:多态一定是发生在子类和父类之间。
重写:子类重写了父类的方法。
通过在python面向对象中对多态的初步学习,我们已经得出多态的两个使用前提,这点是需要小伙伴们使用时需要注意的,大家不要忘记啦。
下一篇