返回介绍

静态方法替代方案

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

如果不能使得一个无self方法称为特殊的,有一些不同的编码结构可以尝试。如果想要调用没有一个实例而访问类成员的函数,可能最简单的思路就是仅在类之外生成它们的简单函数,而不是类方法。通过这种方式,调用中不会期待一个实例。例如,对spam.py的如下修改在Python 3.0和Python 2.6中都有效(虽然在Python 2.6中会对其print语句显示额外的圆括号):

因为类名称对简单函数而言是可读取的全局变量,这样可正常工作。此外,函数名变成了全局变量,这仅适用于这个单一的模块而已。它不会和程序其他文件中的变量名冲突。

在Python中的静态方法之前,这一结构是通用的方法。由于Python已经把模块提供为命名空间分隔工具,因此可以确定通常不需要把函数包装到一个类中,除非它们实现了对象行为。像这里这样的模块中的简单函数,做了无实例类方法的大多数工作,并且已经与类关联起来,因为它们位于同一模块中。

遗憾的是,这种方法仍然不是理想的。其一,它给该文件的作用域添加了一个额外的名称,该名称只用来处理单个的类。此外,该函数与类的直接关联很小;实际上,它的定义可能在数百行代码之外的位置。可能更糟糕的是,像这样的简单函数不能通过继承定制,由此,它们位于类的命名空间之外:子类不能通过重新定义这样的一个函数来直接替代或扩展它。

我们可能想要像通常那样使用一个常规方法并总是通过一个实例调用它,从而使得这个例子以独立于版本的方式工作:

遗憾的是,正如前面所提到的,如果我们没有一个实例可用,并且产生一个实例来改变类数据,就像这里的最后一行所说明的那样,这样的方法完全是无法工作的。更好的解决方案可能是在类中把一个方法标记为不需要一个实例。下一小节展示了如何做到这点。

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

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

发布评论

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