在Python中,静态方法和类方法的区别如下:
- 定义方式不同
- 静态方法使用@staticmethod装饰器
- 类方法使用@classmethod装饰器
## python www.itzhimei.com 代码
class A:
@staticmethod
def foo():
pass
@classmethod
def bar(cls):
pass
- 传递参数不同
- 静态方法不传入任何参数
- 类方法第一个参数是类本身(cls)
## python www.itzhimei.com 代码
class A:
@staticmethod
def foo():
print('static method')
@classmethod
def bar(cls):
print('class method', cls)
- 调用方式不同
- 静态方法通过类名或实例名调用
- 类方法只能通过类名调用
## python www.itzhimei.com 代码
A.foo()
a = A()
a.foo()
A.bar() # 正确
a.bar() #错误
- 使用场景不同
- 静态方法与类无强绑定,不需要类信息
- 类方法用于类内部,需要访问类信息
综上,静态方法独立于类和实例,类方法依赖于类而不依赖实例。