type
status
date
slug
summary
tags
category
icon
password
URL
@staticmethod
装饰器 @staticmethod 修饰的方法称为:静态方法,和普通的函数没有什么区别
下面将聊聊实际项目中几种应用场景
1、要调用一个静态方法,一般使用形式是:「 类名.方法名() 」
复制
当然,也可以实例化一个类对象,通过这个对象去调用静态方法,但是不建议使用这种方式
复制
2、针对类中定义的静态变量,可以使用「 类名.变量名 」 的形式去访问
复制
3、静态方法内部使用其他静态方法、类方法,同样是使用「 类名.方法名() 」去调用
复制
4、静态方法内部调用普通方法,访问实例属性
普通方法和实例属性都必须通过实例对象去引用,不能直接使用类名去访问
复制
5、子类的使用
在子类中调用父类定义好的静态方法,只需要将类名替换为子类名称即可
复制
@classmethod
装饰器 @classmethod 修饰的方法称为:类方法,在使用的时候,会将类本身作为第一个参数 cls 传递给类方法
复制
其中,cls 代表外层类本身,可以实例化,也可以直接调用静态方法、类方法、静态变量
下面逐一进行说明
1、要调用一个类方法,一般使用形式是:「 类名.方法名() 」
复制
和静态方法类似,也可以实例化一个类对象,通过这个对象去调用静态方法,但是不建议使用这种方式
2、调用静态变量
静态方法内部引用静态变量有两种方式,分别是:
- 「 类名.变量名 」
- 「 cls.变量名 」
注意:由于 cls 代表就是外层类本身,所以这两种方式等效
复制
3、类方法内部调用其他类方法、静态方法
在一个类方法内部,可以使用「 类名.类方法名() 」、「 类名.静态方法名() 」的形式去调用方法
复制
4、类方法内部调用普通方法,访问实例属性
需要通过 cls 变量实例化一个类对象,然后通过这个对象去调用普通方法和实例属性
复制
5、子类的使用
在子类中调用父类定义好的类方法,只需要将类名替换为子类名称即可,代码和静态方法类似
区别
下面总结一下普通方法、静态方法、类方法的区别
- 普通方法:第一个参数 self 代表实例对象本身,可以使用 self 直接引用定义的实例属性和普通方法;如果需要调用静态方法和类方法,通过「 类名.方法名() 」调用即可
- 静态方法:使用「 类名.静态变量 」引用静态变量,利用「 类名.方法名() 」调用其他静态方法和类方法;如果需要调用普通方法,需要先实例化一个对象,然后利用对象去调用普通方法
- 类方法:第一个参数 cls 代表类本身(等价),通过「 cls.静态变量 」或「 类名.静态变量 」引用静态变量,利用「 cls.方法名() 」或「 类名.方法名() 」去调用静态方法和类方法;如果需要调用普通方法,需要先实例化一个对象,然后利用对象去调用普通方法
- 静态方法和类方法是针对类定义的,除了可以使用类名去调用,也可以使用实例对象去调用,但是不建议
最后
一般来说,如果方法内部涉及到实例对象属性的操作,建议用普通方法;如果方法内部没有操作实例属性的操作,仅仅包含一些工具性的操作,建议使用静态方法;而如果需要对类属性,即静态变量进行限制性操作,则建议使用类方法