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 "", line 1, in
TypeError: A.hello() takes 0 positional arguments but 1 was given
【python中类似c++静态方法的一个记录】如上,我们知道python类方法会在对象实例调用方法时,自动传入对象参数,但这时候好像就不行了,因为它被classmethod修饰器确定为静态方法,但cls的作用使得它不会自动传入对象参数(类似c++的this指针)
推荐阅读
- JS|说说JavaScript中的数据类型
- python|编程开源_开源社区在编程中的方式和方式
- javascript中为何在匿名function函数后面还外加一个括号
- 从|从 TikTok“重 QA 轻测试”来看中美软件开发之间的差异
- 4g网络什么时候淘汰_4G会被淘汰(4G手机会退网?中国移动发话了)
- 中国联通关闭2g|中国联通关闭2g 3g信号服务器,联通关闭2G3G信号 关闭2G3G信号会有什么影响()
- 一篇文章彻底弄懂Java中二叉树
- 面试|Spring 面试题大全(持续更新中……)
- Python舆论篇|自学Python(做不到这几点,一般人我还是劝你算了吧!)
- python|python学习笔记——day05