系统学习Python——类(class):静态方法(staticmethod)和类方法(classmethod)-[使用静态方法和类方法的原因]

分类目录:《系统学习Python》总目录


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

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

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

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

尽管较少用到,Python还支持类方法的概念。类方法是类的一种方法,传人给它们的第一位参数是一个类对象而不是一个实例对象,不管是通过一个实例或一个类调用它们。这种方法也可以通过传人它们的类参数来访问类数据(也就是我们常说的self),即便是通过实例来调用也是如此。常规的方法(实例方法)在调用的时候则需要另外接受一个主体实例,静态方法和类方法则不会。

参考文献:
[1] Mark Lutz. Python学习手册[M]. 机械工业出版社, 2018.

猜你喜欢

转载自blog.csdn.net/hy592070616/article/details/135433286