返回介绍

静态方法和类方法

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

在Python 2.2中,有可能在类中定义两种方法,它们不用一个实例就可以调用:静态方法大致与一个类中的简单的无实例函数类似地工作,类方法传递一个类而不是一个实例。尽管这一功能与前面小节所介绍的新式类一起添加,静态方法和类方法只对经典类有效。

要使用这些方法,必须在类中调用特殊的内置函数,分别名为static method和classmethod,或者使用我们将在本章后面遇到的装饰语法来调用。在Python 3.0中,无实例的方法只通过一个类名调用,而不需要一个staticmethod声明,但是这样的方法确实通过实例来调用。

为什么使用特殊方法

正如我们已经学习过的,类方法通常在其第一个参数中传递一个实例对象,以充当方法调用的一个隐式主体。然而今天,有两种方法来修改这种模式。在说明这两种方法之前,我应该介绍一下为什么这与你有关。

有时候,程序需要处理与类而不是与实例相关的数据。考虑要记录由一个类创建的实例的数目,或者维护当前内存中一个类的所有实例的列表。这种类型的信息及其处理与类相关,而非与其实例相关。也就是说,这种信息通常存储在类自身上,不需要任何实例也可以处理。

对于这样的任务,一个类之外的简单函数编码往往就能够胜任——因为它们可以通过类名访问类属性,它们能够访问类数据并且不需要通过一个实例。然而,要更好地把这样的代码与一个类联系起来,并且允许这样的过程像通常一样用继承来定制,在类自身之中编写这类函数将会更好。为了做到这点,我们需要一个类中的方法不仅不传递而且也不期待一个self实例参数。

Python通过静态方法的概念来支持这样的目标——嵌套在一个类中的没有self参数的简单函数,并且旨在操作类属性而不是实例属性。静态方法不会接受一个自动的self参数,不管是通过一个类还是一个实例调用。它们通常会记录跨所有实例的信息,而不是为实例提供行为。

尽管较少用到,Python还支持类方法的概念,这是类的一种方法,传递给它们的第一个参数是一个类对象而不是一个实例,不管是通过一个实例或一个类调用它们。即便是通过一个实例调用,这样的方法也可以通过它们的self类参数来访问类数据。常规的方法(现在正规的叫法是实例方法)在调用的时候仍然接受一个主题实例,静态方法和类方法则不会。

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

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

发布评论

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