Python中的静态方法、实例方法、类方法的区别
实例方法
定义:第一个参数必须是实例对象,该参数名一般约定为“self”,通过它来传递实例的属性和方法(也可以传类的属性和方法);
调用:只能由实例对象调用。
类方法
定义:使用装饰器@classmethod。第一个参数必须是当前类对象,该参数名一般约定为“cls”,通过它来传递类的属性和方法(不能传实例的属性和方法);
调用:实例对象和类对象都可以调用。
静态方法
定义:使用装饰器@staticmethod。参数随意,没有“self”和“cls”参数,但是方法体中不能使用类或实例的任何属性和方法;
调用:实例对象和类对象都可以调用。
# 代码
import time
class Tool(object):
count = 0
def __init__(self, name):
self.name = name
Tool.count += 1
# 定义一个实例方法,有self参数
def action(self):
print("挥动{}".format(self.name))
# 定义一个类方法,有cls参数
@classmethod
def shou_tool_count(cls):
print("工具对象的数量{}".format(cls.count))
# 定义一个静态方法,初始没有任何参数
@staticmethod
def showTime():
print(time.strftime("%H:%M:%S", time.localtime()))
# 创建工具对象
tool = Tool("斧头")
too2 = Tool("榔头")
# 调用类方法,逻辑上类方法一般由类自身调用,其实实例对象和类对象都可以调用
Tool.shou_tool_count()
# 调用实例方法,只能由实例对象调用
tool.action()
# 调用静态方法,实例对象和类对象均可调用
too2.showTime()
Tool.showTime()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# 运行结果
工具对象的数量2
挥动斧头
20:30:46
20:30:46
1
2
3
4
2
3
4
1
2
3
4
2
3
4
编辑 (opens new window)
上次更新: 2022/12/31, 16:52:27
- 01
- SpringCache基本配置类05-16
- 03
- Rpamis-security-原理解析12-13