类方法
class Methodsdemo:
param_a = 0
#定义类方法必须要加 classmethod装饰器
@classmethod
def class_method_demo(cls):
"""
这是一个类方法,类方法的第一个参数必须为cls,以区别实例方法的self参数
:return:
"""
print('这是一个类方法',cls.param_a)
if __name__ == '__main__':
Methodsdemo.class_method_demo()
定义
- 使用@classmethod装饰器,第一个参数为类本身,所以通常使用cls命名做区别
- 在类内可以直接使用类方法或者类变量,无法直接使用实例变量或者方法
调用
- 无需实例化,直接类.方法名调用,也可以通过实例.方法名调用
静态方法
定义:
- 使用@staticmethod装饰器,没有和类有关的参数
- 无法使用任何类方法,类变量或者实例方法,实例变量
调用:
- 无需实例化,直接通过类.方法名调用,也可以通过实例.方法名调用
class Method_demo:
param = 0
@staticmethod
def method_demo():
print('这是一个静态方法')#无法调用类变量
if __name__ == '__main__':
Method_demo.method_demo()
tips:
- 注意使用@staticmethod
- 注意该静态方法无法传入self、cls参数
- 要想传入参数,要避免使用self、cls
class Method_demo:
param = 0
@staticmethod
def method_demo(param1):
print('这是一个静态方法',param1)#传入参数param1
if __name__ == '__main__':
Method_demo.method_demo('hogwarts')
运行结果是:这是一个静态方法 hogwarts
总结
名称 | 定义 | 调用 | 关键字 | 使用场景 |
普通方法 | 至少需要一个参数self | 实例名.方法名() | 无 | 方法内部涉及到实例对象属性的操作 |
类方法 | 至少需要一个参数cls | 类名.方法名()或者实例名.方法名() | @classmethod | 如果需要对类属性,及静态变量进行限制性操作时 |
静态方法 | 无默认参数 | 类名.方法名() | @staticmethod | 无需类或者实例参与 |