python中类似c++静态方法的一个记录

个人学习c++出身,在后面的工作中接触到python,见到一些classmethod的字眼有点疑惑,所以进行一些记录。

都知道的是,c/c++中有着静态成员,静态方法的存在,比如:

class A:
{
    static int a;

public:
    static void hello(){printf("Hello, world.\n")}
};

int main() {
    A a;
    a.hello();    //错误调用
    A::hello();   //正确调用
    return 0;
}

上面就是关于一个静态方法的一个声明和使用,可以看到,静态方法是直接绑定于对象,由类名加::加静态方法名直接调用,是一种很方便的用法。

然后就是我在python中看到的一个使用:

class A:

    @classmethod
    def hello(cls):
        print('hello, world')

>>> A.hello()
Hello, world

因为是看别人的代码,项目太大,一下子不知道这个用法,后来才发现,这就是一个定义静态方法的一个python实现,可以通过A.hello()来调用

因此这里记录一下,在需要定义这种静态方法的时候,可以这样定义,不过静态方法的参数一定要是cls,不然使用就会报错,如下:

class A:
     @classmethod
     def hello():
         print('hello, world.')
>>> A.hello()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: A.hello() takes 0 positional arguments but 1 was given

如上,我们知道python类方法会在对象实例调用方法时,自动传入对象参数,但这时候好像就不行了,因为它被classmethod修饰器确定为静态方法,但cls的作用使得它不会自动传入对象参数(类似c++的this指针)

posted @ 2022-03-02 15:50  夏目&贵志  阅读(327)  评论(0编辑  收藏  举报