返回介绍

步骤4:通过子类定制行为

发布于 2024-01-29 22:24:15 字数 1045 浏览 0 评论 0 收藏 0

此时,我们的类已经具备了Python中的大多数OOP机制:它创建实例、在方法中提供行为,并且现在甚至做一些运算符重载来改变__str__中的打印操作。它有效地把我们的数据和逻辑一起包装到一个单个的、自包含的软件成分中,使得将来能够很容易地定位代码并很直接地修改代码。通过允许我们封装行为,它还允许我们构建代码以避免冗余,并且还避免了难以维护。

它唯一没有涉及的主要的OOP概念就是通过继承来定制化。在某种意义上,我们已经实现过继承,因为实例从类那里继承了方法。要展示OOP的真正的能力,我们需要定义一个超类/子类关系,以允许我们扩展软件并替代一些继承的行为。毕竟,这是OOP背后的主要思想;基于已经完成的工作的定制来促进一种编码模式,可以显著地缩减开发时间。

编写子类

作为下一个步骤,让我们把OOP的方法学付诸应用,并且通过扩展软件层级来定制Person类。为了编写这个教程,我们定义Person的一个子类,名为Manager,它用一个更加特殊的版本替代了继承的giveRaise方法。我们的新类从下面开始:

这行代码意味着我们定义了一个名为Manager的新类,它继承自超类Person并且可能向Person添加了一些定制。更直白地说,Manager几乎像一个Person一样(必须承认,我绕了个大弯子讲了个小笑话...),但是Manager有一种定制的方法来涨工资。

为了防止争论,让我们假设当一个Manager要涨工资的时候,它像往常一样接受一个传入的百分比,但是,也会获得一个默认为10%的额外奖金。例如,如果一个Manager的加薪指定为10%,那么,它实际得到了20%的增长(与Person相关的生或死的问题,当然都与此严格地巧合)。我们新的方法像下面这样开始,因为giveRaise的这一新定义更接近于类树中的Manager实例,而不是最初的Person中的版本,它有效地替代了、从而定制了该操作。还记得吧,根据继承查找规则,名字的较低版本胜出:

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文