前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python中的多态

Python中的多态

作者头像
benym
发布2022-07-14 13:52:23
4120
发布2022-07-14 13:52:23
举报
文章被收录于专栏:后端知识体系后端知识体系

当子类和父类都存在相同的 game()方法时,子类的 game() 覆盖了父类的 game(),在代码运行时,会调用子类的 game()。

这样,我们就获得了继承的另一个好处:多态

多态的好处就是,当我们需要传入更多的子类,例如新增 XX Dog、YY Dog 等时,我们只需要继承 Dog 类型就可以了,而game()方法既可以直不重写(即使用Dog的),也可以重写一个特有的。这就是多态的意思。调用方只管调用,不管细节,而当我们新增一种Dog的子类时,只要确保新方法编写正确,而不用管原来的代码。这就是著名的“开闭”原则:

  • 对扩展开放(Open for extension):允许子类重写方法函数
  • 对修改封闭(Closed for modification):不重写,直接继承父类方法函数

# 代码

代码语言:javascript
复制
class Dog(object):

    def __init__(self, name):
        self.name = name

    def game(self):
        print("{}跳".format(self.name))


class XiaoTianDog(Dog):

    # 方法重写
    def game(self):
        print("{}飞".format(self.name))


class Person(object):

    def __init__(self, name):
        self.name = name

    def game_with_dog(self, dog):
        print("{}和{}玩耍".format(self.name, dog.name))


# 创建Dog对象
Peter = Dog("皮特")
# 创建XiaoTianDog对象
wangcai = XiaoTianDog("旺财")
# 调用Dog里面的game方法
Peter.game()
# 调用XiaoTianDog里面的game方法
wangcai.game()
xiaoming = Person("小明")
xiaoming.game_with_dog(wangcai)

# 运行结果

代码语言:javascript
复制
皮特跳
旺财飞
小明和旺财玩耍
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-08-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • # 代码
  • # 运行结果
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档