python面向对象中多态的使用前提是什么?

748次阅读
没有评论
python面向对象中多态的使用前提是什么?

python面向对象中多态的使用前提是什么?

我们看到的事物有圆形或者方形之分,这就是事物存在的不同形态,放在我们python中的多态同样适用。有些小伙伴们看到多态中既有区别又有联系,这是因为类继承所带来的好处。多态作为类的三个特性之一,使用时不免会跟其他的特性有所联系。下面我们就python面向对象中多态的使用前提进行探索,开始之间先来简单了解下多态。

多态指的是一类事物有多种形态。

动物有多种形态:人,狗,猪

import abc
class Animal(metaclass=abc.ABCMeta): #同一类事物:动物
    @abc.abstractmethod
    def talk(self):
        pass
 
class People(Animal): #动物的形态之一:人
    def talk(self):
        print('say hello')
 
class Dog(Animal): #动物的形态之二:狗
    def talk(self):
        print('say wangwang')
 
class Pig(Animal): #动物的形态之三:猪
    def talk(self):
        print('say aoao')
class Dog(object):
 
    def __init__(self, name):
        self.name = name
 
    def game(self):
        print("%s 蹦蹦跳跳的玩耍..." % self.name)
 
class XiaoTianDog(Dog):
 
    def game(self):
        print("%s 飞到天上去玩耍..." % self.name)
 :继承、重写。
class Person(object):
 
    def __init__(self, name):
        self.name = name
 
    def game_with_dog(self, dog):
 
        print("%s 和 %s 快乐的玩耍..." % (self.name, dog.name))
        dog.game()

game 方法是在 Dog 父类中定义的,Person 类中只需要让狗对象调用 game 方法,而不关心具体是什么狗。

# 1. 创建一个狗对象
# wangcai = Dog("旺财")
wangcai = XiaoTianDog("飞天旺财")
 
# 2. 创建一个ipipgo对象
xiaoming = Person("ipipgo")
 
# 3. 让ipipgo调用和狗玩的方法
xiaoming.game_with_dog(wangcai)
# ipipgo 和 飞天旺财 快乐的玩耍...
# 飞天旺财 飞到天上去玩耍...

在程序执行时,传入不同的狗对象实参,就会产生不同的执行效果。

类的多态特性,必须满足以下 2 个前提条件:

  • 继承:多态一定是发生在子类和父类之间。
  • 重写:子类重写了父类的方法。

通过在python面向对象中对多态的初步学习,我们已经得出多态的两个使用前提,这点是需要小伙伴们使用时需要注意的,大家不要忘记啦。

神龙|纯净稳定代理IP免费测试>>>>>>>>天启|企业级代理IP免费测试>>>>>>>>IPIPGO|全球住宅代理IP免费测试

相关文章:

版权声明:wuyou2021-05-15发表,共计1359字。
新手QQ群:570568346,欢迎进群讨论 Python51学习